如何在 HTTPPOST 中读取 HTML.RadioButtonFor 的选定值?

How to read a chosen value of HTML.RadioButtonFor in HTTPPOST?

我在 SO 上阅读了很多答案,但是它不适合我。

我有型号:

class SomeOrder
{
     public string TypeDrink {get;  set;}
}

控制器:

public ViewResult Edit(int id)
{
  SomeOrder se = newSomeOrder{ TypeDrink=3 };
  return View(se);
}

并查看:

@Html.EditorForModel   @Html.RadioButtonFor(m=>m.TypeDrink, "1") Tea
@Html.RadioButtonFor(m=>m.TypeDrink, "2") Coffee  
@Html.RadioButtonFor(m=>m.TypeDrink, "3") Juice

如何在[HTTPPOST]方法中读取单选按钮的选定值? 在我的 HTTPPOST 方法中,存储了预选值,而不是用户选择的值:

[HTTPPOST]
public ViewResult Edit(SomeOrder se) 
 {
   string chosenValue=se.TypeDrink;// always the old selected value
 }

如果您的 post 操作类似于

[HttPost]
public ViewResult Edit(SomeOrder model)
{
  // should get it like
  model.TypeDrink;
}

这是利用 mvc 中的模型绑定。

您也可以查看 Request.Form["TypeDrink"] 来获取值,但不推荐这样做

您的模特是:

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Web;

     namespace radiotest.Models
     {
        public class SomeOrder
        {
            public string TypeDrink { get; set; }
        }
     }

您的观点是index.cshtml

    @model radiotest.Models.SomeOrder

     @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
      }
     @using (Html.BeginForm())
     {
        <fieldset>
            <div class="editor-field">
                @Html.RadioButtonFor(m => m.TypeDrink, "1") Tea
                @Html.RadioButtonFor(m => m.TypeDrink, "2") Coffee
                @Html.RadioButtonFor(m => m.TypeDrink, "3") Juice
            </div>
            <div> <input type="submit" value="Submit" /></div>
        </fieldset>

     }

您在 HTTP Get 和 Post 中的控制器是:

    using radiotest.Models;
     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Web;
     using System.Web.Mvc;

     namespace radiotest.Controllers
     {
        public class TestController : Controller
        {

            public ActionResu`enter code here`lt Index()
            {
                 SomeOrder se = new SomeOrder{ TypeDrink="3" };
                 return View(se);
            }

            [HttpPost]
            public ActionResult Index(SomeOrder model)
            {
                //model.TypeDrink gives you selected radio button in HTTP POST
                SomeOrder se = new SomeOrder {TypeDrink = model.TypeDrink };
                return View(se);
            }
        }
     }

您的视图在单选按钮之前包含 @Html.EditorForModel()EditorForModel() 将为模型中的每个 属性 生成表单控件,因此它将为 属性 TypeDrink 生成一个控件。根据应用于您的 属性 的属性,以及您可能拥有的任何 EditorTemplates,它可能会在隐藏的输入中生成。

因为您的表单首先回发 EditorForModel 生成的输入的 name/pair 值,输入的值将绑定到您的模型,单选按钮的值将是被 DefaultModelBinder.

忽略

从您的视图中删除 EditorForModel,模型将根据单选按钮的值进行绑定。