【问题标题】:Disable & Specify default selection for Html.DropDownList禁用并指定 Html.DropDownList 的默认选择
【发布时间】:2015-01-26 00:58:41
【问题描述】:

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

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

然后在视图中,我尝试禁用下拉列表,如下所示:-

@Html.DropDownList("ApproverID",String.Empty,new { @disabled = "disabled" } )

但似乎下拉列表不允许这样做,并且会在视图上引发语法错误?有人可以推荐吗? 谢谢

【问题讨论】:

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


    【解决方案1】:

    您使用了错误的 DropDownList 重载。应该是

    @Html.DropDownList("ApproverID", null, string.Empty, new { disabled= "disabled" })
    

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

    型号

    public int ApproverID { get; set; }
    

    控制器

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

    查看

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

    如果您在控制器中设置属性ApproverID 的值并且它与将被选中的选项的值之一匹配。

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

    【讨论】:

    • 我不使用强类型 DropDownListFor 因为脚手架模板生成的下拉列表使用 Html.DropDownList 而不是强类型的下拉列表,所以我的代码基于我尝试兼容的脚手架模板它,,,,当然使用强类型会更准确..关于这个“@Html.DropDownList("ApproverID", null, string.Empty, new { disabled="disabled" })" 重载方法的第二个问题是什么null是否代表?
    • 您使用的是this overload,其中第二个参数是IEnumerable<SelectListItem>,但您传递的是一个字符串(因此出现错误)。你的意思(我认为)是this overload,其中第三个参数是选项标签。
    • 我也使用下拉列表而不是 displayfor,因为该字段将显示用户名(批准者用户名),而我将存储用户 ID,所以如果我使用带有隐藏字段的 Displayfor,我将发布用户名,,,所以我必须查询数据库以根据用户名获取用户ID,而使用下拉列表将提供显示值的能力,同时提交另一个值..
    • 我强烈推荐使用DropDownListFor(),但如果你确实使用DropDownList(),那么仍然使用@Html.DropDownList("ApproverID", (SelectList)ViewBag.ApproverList, string.Empty, new { disabled= "disabled" })绑定到一个属性。但如前所述,这样做有点毫无意义,然后禁用<select>,因为禁用的控件不会回发。
    • 你真的不需要这样做。只需获取与 ApproverID 关联的用户名,将其分配给视图模型属性或 ViewBag 属性并将其显示在视图中(与 HiddenFor() 一起发回 ApproverID (并且您始终可以设置显示样式)如果这是你想要的,看起来像 select 标签的元素)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多