ViewBag名称可以与DropDownList中的Model属性名称相同吗?
我正在处理ASP.NET MVC-4 Web应用程序。 我在我的动作方法中定义了以下内容来构build一个SelectList
:
ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");
然后我在我的View
里渲染我的DropDownListFor
:
@Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")
如图所示,我将ViewBag
属性命名为ViewBag
属性的Model
属性名称。 从我自己的testing中,定义相同的名字不会引起任何问题或冲突,但我应该避免这种情况吗?
您不应该使用相同的名称模型属性和ViewBag
属性(理想情况下,您不应该使用ViewBag
,而是具有IEnumerable<SelectListItem>
属性的视图模型)。
当使用@Html.DropDownListFor(m => m.CustomerId, ....)
,即使已设置model属性的值并匹配其中一个选项,也会始终"Please Select"
第一个"Please Select"
选项。 原因是该方法首先根据您提供的IEnumerable<SelectListItem>
生成一个新的IEnumerable<SelectListItem>
来设置Selected
属性的值。 为了设置Selected
属性,它从ViewData
读取CustomerID
的值,第一个find的是"IEnumerable<SelectListItem>"
(不是模型属性的值),并且不能将该string与任何选项匹配,所以select第一个选项(因为必须是)。
当使用@Html.DropDownList("CustomerId", ....)
,不会生成data-val-*
属性,并且不会得到任何客户端validation
请参阅此DotNetFiddle显示可能的用例的比较。 只有对模型属性和ViewBag
属性使用不同的名称才能正常工作。
使用它没有害处。 你不会得到任何错误。 但最好的做法是绑定模型属性。
- DropDownlist或DropDownListFor Html助手之间的区别
- 在http处理程序接口中,bool IsReusable的意义
- 实体typesMVC5 EF6中的用户
- 如何保持AppDomain中的ASP.NET程序集活着?
- 如何在Asp.net的图像控件中显示数据库中的图像?
- IHttpHandler.IsReusable有什么用途?
- 查看用户是否属于C#+ Asp.net中Active Directory组的一部分
- 如何获得JavaScript / jQuery Intellisense在Visual Studio 2008中工作?
- “System.Web.Security.SqlMembershipProvider”需要与模式版本“1”兼容的数据库模式