为了账号安全,请及时绑定邮箱和手机立即绑定

ViewBag名称是否与DropDownList中的Model属性名称相同?

ViewBag名称是否与DropDownList中的Model属性名称相同?

慕尼黑的夜晚无繁华 2019-06-13 14:58:43
ViewBag名称是否与DropDownList中的Model属性名称相同?我正在开发一个ASP.NETMV-4 Web应用程序。我在操作方法中定义以下内容,以构建一个SelectList:ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");那我就把我的DropDownListFor如下所示View: @Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")如所示,我将命名为ViewBag属性等于Model属性名CustomerID..根据我自己的测试,定义相同的名称不会导致任何问题或冲突,但我应该避免这种情况吗?
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

不应对模型属性和ViewBag属性(理想情况下,您不应该使用ViewBag,而是一个视图模型,其中包含IEnumerable<SelectListItem>财产)。

使用时@Html.DropDownListFor(m => m.CustomerId, ....)第一"Please Select"选项将始终被选中,即使模型属性的值已被设置并与其中一个选项匹配。原因是该方法首先生成一个新的IEnumerable<SelectListItem>基于您提供的值,以便设置Selected财产。,以便设置Selected属性,它读取CustomerID从…ViewData,第一个发现的是"IEnumerable<SelectListItem>"(不是模型属性的值),并且不能将该字符串与任何选项相匹配,因此选择了第一个选项(因为某些东西必须是)。

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

参考这个DotNetFiddle显示可能用例的比较。仅通过对模型属性和ViewBag属性是否都能正常工作。


查看完整回答
反对 回复 2019-06-13
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-06-13
  • 2 回答
  • 0 关注
  • 371 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信