Asp.net mvc 禁用&;指定Html.DropDownList的默认选择

Asp.net mvc 禁用&;指定Html.DropDownList的默认选择,asp.net-mvc,razor,asp.net-mvc-5,html.dropdownlistfor,Asp.net Mvc,Razor,Asp.net Mvc 5,Html.dropdownlistfor,我正在使用asp.net mvc web应用程序,在操作方法中,我定义了以下选择列表:- ViewBag.ApproverID = new SelectList(db.staffs.ToList(), "ApproverID", "Name"); 然后在视图上,我尝试禁用dropdownlist,如下所示:- @Html.DropDownList("ApproverID",String.Empty,new { @disabled = "disabled" } ) 但是dropdownlist

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

ViewBag.ApproverID = new SelectList(db.staffs.ToList(), "ApproverID", "Name");
然后在视图上,我尝试禁用dropdownlist,如下所示:-

@Html.DropDownList("ApproverID",String.Empty,new { @disabled = "disabled" } )
但是dropdownlist似乎不允许这样做,并且会在视图上引发语法错误?有人可以修改吗?
感谢您使用了错误的
下拉列表重载。这是必须的

@Html.DropDownList("ApproverID", null, string.Empty, new { disabled= "disabled" })
但是,您应该使用强类型帮助程序并绑定到模型属性,以便在回发时绑定它

模型

控制器

ViewBag.ApproverList = new SelectList(db.staffs.ToList(), "ApproverID", "Name");
看法

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


但是为什么要禁用下拉列表呢显然,您无法选择任何内容,并且它不会发回,因此模型属性将为null(可能会导致
ModelState
错误)。如果您只是想显示该值,请使用
@Html.DisplayFor()
@Html.HiddenFor(m=>m.ApproverID)
,以便值回发

我不使用强类型DropDownListFor,因为脚手架模板生成的dropdownlist使用Html.dropdownlist,而不是强类型的dropdownlist,,因此,当我将代码建立在脚手架模板的基础上时,我尝试与它兼容,,,,当然,使用强类型将更加准确。。关于这个“@Html.DropDownList(“ApproverID”,null,string.Empty,new{disabled=“disabled”})”重载方法的第二个问题,null表示什么?您使用的是第二个参数是
IEnumerable
,但您向它传递了一个字符串(因此出现了错误)。您的意思是(我想)第三个参数是选项标签。另外,我使用下拉列表而不是displayfor,因为该字段将显示用户名(审批人用户名),而我将存储用户名,,因此,如果我将displayfor与隐藏字段一起使用,我将发布用户名,,,因此,我必须根据用户名查询数据库以获取用户ID,,而使用dropdownlist将提供显示值的功能,同时提交另一个值。我强烈建议使用
dropdownlist for()
,但如果使用
dropdownlist()
,则仍然绑定到带有
@Html.dropdownlist(“ApproverID”)的属性,(SelectList)ViewBag.ApproverList,string.Empty,新建{disabled=“disabled”})
。但正如前面提到的,这样做然后禁用
是毫无意义的,因为禁用的控件不会发回。你真的不需要这样做。只需获取与ApproverID关联的用户名,将其分配给视图模型属性或
ViewBag
属性,并在视图中显示它(与
HiddenFor()
一起),这样您就可以发回
ApproverID
(如果需要,您可以始终设置显示元素的样式,使其看起来像
select
标记)
ViewBag.ApproverList = new SelectList(db.staffs.ToList(), "ApproverID", "Name");
@Html.DropDownListFor(m => m.ApproverID, (SelectList)ViewBag.ApproverList, "-Please select-", new { disabled = "disabled" })