【发布时间】:2008-11-24 16:58:07
【问题描述】:
为什么模型绑定在 DropDown 上不起作用?
我做错了什么?
为了说明我的问题,我做了以下操作:
创建了一个新的 asp.net MVC 项目(beta1) 创建了以下类:
HomeViewData : ViewDataDictionary
+List : SelectList
在 HomeController 类中添加了如下视图数据
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 的漂亮下拉列表的页面。
然后在选择一个值后,我按下回车键(不用提交按钮),看看我的断点是如何停止代码的。我检查 HomeViewData 的值...
空
如果我做同样的练习,但例如使用文本框,一切正常...
--EDIT--
自从这篇文章以来我尝试过的事情:
- 按照 Phil 的建议,将 [Bind(Prefix="")] 属性添加到我的操作中
- 添加一个 [Bind(Prefix=" ")] 看看这是否会消除“不允许空名称”的错误
- 在控件名称中添加操作参数的名称
【问题讨论】: