MVC 5将单选按钮字符串值发送到post操作方法

本文关键字:post 操作方法 单选按钮 字符串 MVC | 更新日期: 2023-09-27 18:00:39

我已经阅读了一些关于这个问题的问答,但没有一个能让我更接近于解决这个问题。我的问题是,我似乎无法将RadioButtonFor检查值保留到post-action方法。这是很多不相关的东西,所以我会尽量把它归结为相关的问题。

所以我有一个像这样的ViewModel

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

编辑视图的Get Method。我在这里设置SelectedOption,这样我就可以在前端使用它了。任务是根据SelectedOption值显示和隐藏div。据我所知,这部分正在工作,通过jQuery设置值并在视图中使用。

    [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){...}
    }

简化的Edit 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方法中的值相同。我可能错过了一些简单的事情,很可能还有更好的方法。

提前谢谢。

MVC 5将单选按钮字符串值发送到post操作方法

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

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