我正在研究ASP.NET MVC-4 Web应用程序。我在我的action方法中定义了以下内容来构建一个 SelectList
:
ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");
然后我渲染我的 DropDownListFor
跟着我的内心 View
:
@Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")
如图所示,我正在命名 ViewBag
财产等于 Model
属性名称是 CustomerID
。根据我自己的测试,定义相同的名称不会导致任何问题或冲突,但我应该避免这种情况吗?
您不应该为model属性使用相同的名称 ViewBag
财产(理想情况下你不应该使用 ViewBag
根本就是一个视图模型 IEnumerable<SelectListItem>
属性)。
使用时 @Html.DropDownListFor(m => m.CustomerId, ....)
首先 "Please Select"
即使已设置model属性的值并且与其中一个选项匹配,也始终会选择该选项。原因是该方法首先生成一个新的 IEnumerable<SelectListItem>
基于您提供的那个来设置值 Selected
属性。为了设置 Selected
属性,它读取的值 CustomerID
从 ViewData
,它找到的第一个是 "IEnumerable<SelectListItem>"
(不是model属性的值)并且不能将该字符串与任何选项匹配,因此选择了第一个选项(因为必须要有)。
使用时 @Html.DropDownList("CustomerId", ....)
不,不 data-val-*
将生成属性,您将无法获得任何客户端验证
参考 这个DotNetFiddle 显示可能的用例的比较。只为模型属性和使用不同的名称 ViewBag
财产将全部正常运作。
使用它没有害处。你不会得到任何错误。但最佳做法是绑定模型属性。