将htmlattributes添加到DropDownList帮助程序会更改行为

时间:2014-12-16 04:31:44

标签: asp.net asp.net-mvc razor html.dropdownlistfor

在MVC 5之前,DropDownList在我的Razor Edit View中被搭建为:

@Html.DropDownList("EntityId", String.Empty)

但现在相当于(后MVC 5)的脚手架为:

@Html.DropDownList("EntityId", null, htmlAttributes: new { @class = "form-control" })

我想添加htmlAttributes以保持UI一致,但DropDownList不再按可预期的EntityId (int ? EntityId)工作。问题是如果EntityId为null,则默认项设置为列表中的第一项。如果id为null,我想要一个空白项目,如果没有,我想要一个合适的选择。

PS。我的控制器按如下方式构建列表: ViewBag.EntityId = new SelectList(db.Entities, "EntityId", "Name", EntityId);

2 个答案:

答案 0 :(得分:4)

使用强类型帮助程序。如果您的模型具有属性int? EntityId,则在控制器中

ViewBag.EntityList = new SelectList(db.Entities, "EntityId", "Name")

请注意,ViewBag属性不应与model属性同名,并且不需要'SelectList`的第3个参数。

然后在视图中

@Html.DropDownListFor(m => m.EntityId, (SelectList)ViewBag.EntityList, "--Please select--", new  { @class = "form-control" })

如果EntityIdnull,则会选择第一个选项,否则如果EntityId与您的某个选项的值匹配,则会选中该选项。

答案 1 :(得分:1)

@HTML.DropDownList修改为

@Html.DropDownList("EntityId", (SelectList)Viewbag.EntityList,String.Empty, new { @class = "form-control" })`