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

时间:2015-08-24 07:48:17

标签: c# asp.net-mvc asp.net-mvc-4 radiobuttonfor

我已经在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]方法中读取所选的radiobutton值? 在我的HTTPPOST方法中,存储了预选值,而不是用户选择的值:

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

3 个答案:

答案 0 :(得分:1)

如果您的帖子操作类似

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

这是在mvc中使用模型绑定。

您还可以查看Request.Form["TypeDrink"]以获取值,但不建议使用

答案 1 :(得分:1)

你的模特是:

     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);
            }
        }
     }

答案 2 :(得分:1)

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

因为您的表单首先回发EditorForModel生成的输入的名称/对值,输入的值将绑定到您的模型,单选按钮的值将被{忽略{1}}。

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