簡體   English   中英

MVC 5 將單選按鈕字符串值發送到發布操作方法

[英]MVC 5 send radio button string value to post action method

我已經閱讀了幾個關於這個問題的問題和答案,但沒有一個讓我更接近解決這個問題。 我的問題是我似乎無法將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方法的值相同。 我可能錯過了一些簡單的事情,並且很可能有一些更好的方法來解決這個問題。

提前致謝。

那是因為您的SelectedOption屬性有一個HiddenFor關聯的編輯字段。 只需刪除HiddenFor就可以了:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM