1

我在 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
 }
4

3 回答 3

1

如果你的帖子动作像

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

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

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

于 2015-08-24T08:08:50.787 回答
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);
            }
        }
     }
于 2015-08-24T08:40:25.513 回答
1

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

因为您的表单会回发由EditorForModelfirst 生成的输入的名称/对值,所以输入的值将绑定到您的模型,而单选按钮的值将被DefaultModelBinder.

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

于 2015-08-24T09:42:09.320 回答