已禁用DropDownList razor mvc

nol*_*fra 6 c# html.dropdownlistfor razor asp.net-mvc-4

在我的剃刀视图中,我使用下拉列表.我希望禁用此控件(不可选).

我的代码是:

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{ @disabled = "disabled" })</div>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我的控制始终启用.Html页面代码是:

<select name="LinguaCodiceMadre" id="LinguaCodiceMadre" data-val-length-max="10" data-val-length="The field LinguaCodiceMadre must be a string with a maximum length of 10." data-val="true">
    <option></option>
    <option value="sq">Albanian</option>
    <option value="de">German</option>
    <option value="en">English</option>
    <option value="fr">French</option>
    <option value="it">Italian</option>
    <option value="pt">Portuguese</option>
    <option value="ru">Russian</option>
    <option value="es">Spanish</option>
</select>
Run Code Online (Sandbox Code Playgroud)

没有"禁用"属性.

我的真正目标是有条件地启用/禁用下拉列表,如下所示:

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{@disabled=Model.IsDisabled ? "disabled" : "false"})</div>
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我试过两个

new{@disabled=Model.IsDisabled ? "disabled" : "false"}
Run Code Online (Sandbox Code Playgroud)

new{disabled=Model.IsDisabled ? "disabled" : "false"}
Run Code Online (Sandbox Code Playgroud)

但没有,禁用属性不在html页面上呈现.

有人有想法吗?

sup*_*ool 11

只是一个小小的修正.试试这个

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{ disabled = "disabled" })</div>
Run Code Online (Sandbox Code Playgroud)

这肯定会禁用你的Drop-down ..

以及其他替代方案是使用jquery:

声明@Id为你的控件稍后做这样的事情

$("#youid").prop("disabled", true); 
Run Code Online (Sandbox Code Playgroud)

最后试试这个:如果这不工作意味着你身边的问题

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList,String.Empty, new{ disabled = "disabled" })</div>
Run Code Online (Sandbox Code Playgroud)

问候

  • 我确认`@disable ="disabled"`也适用于MVC5. (2认同)

Jac*_*der 5

首先,如果要基于用户输入启用/禁用下拉列表,则需要使用javascript启用/禁用下拉列表。

对于Javascript使用以下逻辑:

$("#checkbox1").change(function () {

  if (document.getElementById("checkbox1").checked == true) {

     document.getElementById("DropDown1").disabled = true;
  }
  else {

     document.getElementById("DropDown1").disabled = false;
  }

});
Run Code Online (Sandbox Code Playgroud)

这是我为您尝试的Fiddle演示

小提琴演示

  1. 我有两个属性的模型
  2. 我正在出于演示目的在Controller的DropDown中填充测试数据(在您的情况下,它将来自数据库)
  3. 在视图上,我为两个输入都分配了ID。
  4. 最后,在下面的视图中,有Javascript Function正在驱动CheckBox来查看是否选中,如果选中,则不能从DropDown中选择任何值,否则它将打开Select Values。


nol*_*fra 2

我解决了我的问题:我的代码中有一个javascript(抱歉,我没有立即注意到)在文档准备好时删除禁用属性。

我所做的是:

  • 为 HtmlHelper 创建扩展:

public static class HtmlExtensions
{
    public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionText, bool canEdit)
    {
        if (canEdit) return html.DropDownListFor(expression, selectList, optionText);
            return html.DropDownListFor(expression, selectList, optionText, new { @disabled = "disabled" });
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 在剃刀视图中:

<code><div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, "", Model.IsEnabled)</div></code>
Run Code Online (Sandbox Code Playgroud)

这有效!

谢谢