禁用并指定Html.DropDownList的默认选择

joh*_* Gu 2 asp.net-mvc html.dropdownlistfor razor asp.net-mvc-5

我正在使用asp.net mvc web应用程序,在action方法中我定义了以下选择列表: -

ViewBag.ApproverID = new SelectList(db.staffs.ToList(), "ApproverID", "Name");
Run Code Online (Sandbox Code Playgroud)

然后在视图上我试图禁用下拉列表如下: -

@Html.DropDownList("ApproverID",String.Empty,new { @disabled = "disabled" } )
Run Code Online (Sandbox Code Playgroud)

但似乎下拉列表不允许这样,并会在视图上引发语法错误?任何人都可以羡慕吗?谢谢

小智 5

你使用了错误的重载DropDownList.它需要

@Html.DropDownList("ApproverID", null, string.Empty, new { disabled= "disabled" })
Run Code Online (Sandbox Code Playgroud)

但是,您应该使用强类型帮助程序并绑定到模型属性,以便它可以在回发时绑定

模型

public int ApproverID { get; set; }
Run Code Online (Sandbox Code Playgroud)

调节器

ViewBag.ApproverList = new SelectList(db.staffs.ToList(), "ApproverID", "Name");
Run Code Online (Sandbox Code Playgroud)

视图

@Html.DropDownListFor(m => m.ApproverID, (SelectList)ViewBag.ApproverList, "-Please select-", new { disabled = "disabled" })
Run Code Online (Sandbox Code Playgroud)

如果ApproverID在控制器中设置属性值,并且它与选项的某个值匹配,则将选择该值.

但为什么禁用下拉列表?- 你显然无法选择任何东西,它不会回发,所以模型属性将为null(并可能导致ModelState错误).如果您只想显示值,请使用,@Html.DisplayFor()然后@Html.HiddenFor(m => m.ApproverID)将值发回