繁体   English   中英

ViewBag 名称可以与 DropDownList 中的 Model 属性名称相同吗?

[英]Can the ViewBag name be the same as the Model property name in a DropDownList?

我正在开发一个 ASP.NET MVC-4 Web 应用程序。 我在我的操作方法中定义以下内容来构建SelectList

ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");

然后我在我的View渲染我的DropDownListFor如下:

 @Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")

如图所示,我将ViewBag属性命名为等于CustomerIDModel属性名称。 从我自己的测试来看,定义相同的名称不会导致任何问题或冲突,但我应该避免这种情况吗?

您不应该对模型属性和ViewBag属性使用相同的名称(理想情况下,您根本不应该使用ViewBag ,而是应该使用具有IEnumerable<SelectListItem>属性的视图模型)。

使用@Html.DropDownListFor(m => m.CustomerId, ....) ,即使模型属性的值已设置并匹配其中一个选项,也将始终"Please Select"第一个"Please Select"选项。 原因是该方法首先根据您提供的值生成一个新的IEnumerable<SelectListItem>以设置Selected属性的值。 为了设置Selected属性,它从ViewData读取CustomerID的值,它找到的第一个值是"IEnumerable<SelectListItem>" (不是模型属性的值),并且无法将该字符串与您的任何选项匹配,所以选择了第一个选项(因为必须有一些东西)。

使用@Html.DropDownList("CustomerId", ....) ,不会生成data-val-*属性,也不会得到任何客户端验证

请参阅此 DotNetFiddle显示可能用例的比较。 只有对模型属性和ViewBag属性使用不同的名称,它才能正常工作。

使用它没有坏处。 你不会得到任何错误。 但最佳实践是绑定模型属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM