c# - MVC 5将单选按钮字符串值发送到后操作方法

标签 c# .net asp.net-mvc razor

我已经阅读了有关此问题的几个问题和答案,但没有一个能让我更接近解决此问题。我的问题是我似乎无法将 RadioButtonFor 检查值保留到后操作方法中。这是很多不相关的东西,所以我会尝试将其归结为相关的问题。

所以我有一个像这样的ViewModel:

    public class QEventHandlerVM
    {
       //Removed unrelated
       public QueueEventHandlerModel QEventHandler { get; set; }           
       public string SelectedOption { get; set; }
    }

编辑 View 的获取方法。我在此处设置 SelectedOption ,以便我可以在前端使用它。任务是根据 SelectedOption 值显示和隐藏 div。据我所知,这部分正在工作,该值被设置并通过 jQuery 在 View 中使用。

    [HttpGet]
    public ActionResult Edit(int id)
    {
        try
        {
            //Removed unrelated...
            QueueEventHandlerModel model;
            QEventHandlerVM vm = new QEventHandlerVM();

            ApiCommunicator.Get("QueueEventHandlers/" + id, out model);

            vm.QEventHandler = model;
            if (...)                
                vm.SelectedOption = "toQueue";

            if (...)                
                vm.SelectedOption = "redirection";

            if (...)
                vm.SelectedOption = "hangup";

            return View(vm);
        }
        catch (HttpResponseUnsuccessfulException e){...}

    }

简化的编辑 View :

        @model Foo.WebSites.Web.Views.QueueEventHandlers.QEventHandlerVM

        @using (Html.BeginForm())
        {
            @Html.AntiForgeryToken()

            //Unrelated stuff...
            @Html.HiddenFor(s => s.SelectedOption)

            @Html.RadioButtonFor(s => s.SelectedOption, "toQueue", new { id = "rdToQueue", @class = "q-event" })
            <label for="rdToQueue">Transfer call to queue</label>

            @Html.RadioButtonFor(s => s.SelectedOption, "redirect", new { id = "rdRedirect", @class = "q-event" })
            <label for="rdRedirect">Transfer call to destination</label>

            @Html.RadioButtonFor(s => s.SelectedOption, "hangup", new { id = "rdHangup", @class = "q-event" })
            <label for="rdHangup">Hangup</label>

            <button type="submit" class="btn btn-primary btn-sm">Save</button>
        }

Post 方法

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(QEventHandlerVM model, int id)
    {
        if (!ModelState.IsValid) {... return View(model); }

        if (model.SelectedOption == "hangup" || model.SelectedOption == "redirection")
        {
            model.QEventHandler.QueueId = null;
        }
        else if (model.SelectedOption == "toQueue")
        {
            model.QEventHandler.Phrase = string.Empty;
            model.QEventHandler.Redirection = string.Empty;
        }
        else if (model.SelectedOption == "hangup")
        {
            model.QEventHandler.Redirection = string.Empty;
            model.QEventHandler.QueueId = null;
        }

        try {// Update}
        catch (HttpResponseUnsuccessfulException e){...}
    }

现在,这里的 SelectedOption 值与 Get 方法中的值相同。我可能错过了一些简单的事情,并且很可能有一些更好的方法来解决这个问题。

提前致谢。

最佳答案

这是因为您的 SelectedOption 属性有一个 HiddenFor 关联的编辑字段。只需删除 HiddenFor 即可:

@Html.HiddenFor(s => s.SelectedOption)

关于c# - MVC 5将单选按钮字符串值发送到后操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139373/

相关文章:

asp.net - ListBoxFor 没有绑​​定我的 View 模型

c# - 从暴露给 COM 的 C# 类中提取 C/C++ 头文件

c# - 用于列出从 .NET 代码访问数据库的工具

c# - 如何将 System.Type 转换为其可为 null 的版本?

c# - DefaultAuthenticationTypes.ApplicationCookie 在服务器重启后仍然存在

通过AJAX的ASP.net MVC AntiForgeryToken

c# - T4 模板 If Else 语句写出对象而不是文本?

c# - 创建自定义 winforms 容器

c# - 如何在 LINQ select 语句中直接设置 DTO 的属性值

jquery - jqGrid 的 LINQ 搜索中的可为 Null 值