为什么不对DropDown进行模型绑定?
我做错了什么?
为了说明我的问题,我做了以下几点:
创建一个新的asp.net MVC项目(beta1) 创建了以下类:
HomeViewData : ViewDataDictionary
+List : SelectList
向HomeController类添加了一个viewdata,如下所示
Homecontroller: Controller
+HomeViewData vd = new HomeViewData
在Home.Index()方法中添加了以下行:
vd.list = new SelectList(new List<string>(){"test", "test1", "test2"});
return View("Index", vd);
并复制了相同的方法,但使用不同的签名来捕获回发调用
[AcceptVerps(HttpVerbs.Post)]
public ActionResult Index(HomeViewdata d)
这里我在第一行代码中添加了一个断点 然后我将以下代码添加到我的Index.aspx
<%Html.BeginForm();%>
<%=Html.DropDownList("List")%>
<%Html.EndForm();%>
结果,我得到一个页面,其中包含值test,test1和test2的良好下拉列表 然后选择一个值后按Enter键(没有用提交按钮打扰),看看我的断点如何暂停代码。我检查HomeViewData的值... 的 NULL
如果我做同样的练习,但是以文本框为例,一切正常......
的 - 编辑 -
自从这篇文章以来我尝试过的事情:
答案 0 :(得分:3)
啊,这里的问题是按照惯例,模型绑定器以“d.PropertyName”的形式查找值,因为Index操作方法的参数是“d”。
由于你可以有一个动作方法的多个参数,我们默认使用参数名作为前缀。
修复此问题很简单,只需使用Bind属性告诉MVC不要使用前缀。
[AcceptVerps(HttpVerbs.Post)]
public ActionResult Index([Bind(Prefix="")]HomeViewdata d)