【问题标题】:Disabled DropDownList razor mvc禁用 DropDownList razor mvc
【发布时间】:2014-06-09 15:45:45
【问题描述】:

在我看来,我使用下拉列表。我想禁用此控件(不可选择)。

我的代码是:

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

但它不起作用,我的控制总是启用的。 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>

没有“禁用”属性。

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

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

但它不起作用。

我都试过了

new{@disabled=Model.IsDisabled ? "disabled" : "false"}

new{disabled=Model.IsDisabled ? "disabled" : "false"}

但没什么,禁用的属性不会在 html 页面上呈现。

有人有想法吗?

【问题讨论】:

  • Model.LinguaMadreList的返回类型是什么?
  • code public IEnumerable LinguaMadreList { get;放; }
  • 不好意思,忘了还问model.LinguaCodiceMadre的类型是什么?
  • 没问题... code [StringLength(10)] public string LinguaCodiceMadre { get;放; }
  • 为什么不想使用 disabled 属性?

标签: c# asp.net-mvc-4 razor html.dropdownlistfor


【解决方案1】:

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

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

这肯定会禁用您的下拉菜单..

其他选择是使用 jquery :

为您的控件声明 @Id 稍后执行类似操作

$("#youid").prop("disabled", true); 

最后试试这个:如果这不起作用意味着你这边有问题

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

问候

【讨论】:

  • 我确认 @disabled="disabled" 也适用于 MVC5。
  • 问题依然存在。我都尝试了 new{@disabled=Model.IsDisabled ? "disabled" : "false"} 和 new{disabled=Model.IsDisabled ? "disabled" : "false"} 但什么都没有,disabled 属性不会在 html 页面上呈现。
【解决方案2】:

首先,如果你想根据用户输入启用/禁用下拉列表,你需要使用javascript来启用/禁用下拉列表。

对于 Javascript 使用以下逻辑:

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

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

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

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

});

这是我为您尝试过的 Fiddle Demo,效果非常好

Fiddle Demo

  1. 我有两个属性的模型
  2. 出于演示目的,我正在控制器的下拉菜单中填充测试数据(在您的情况下,它将来自数据库)
  3. 在视图上,我正在为两个输入分配 ID。
  4. 最后,在下面的视图中,有一个 Javascript 函数驱动 CheckBox 来查看是否选中,如果选中,则不能从下拉菜单中选择任何值,否则它可以打开选择值。李>

【讨论】:

    【解决方案3】:

    我解决了我的问题:我的代码中有一个 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" });
        }
    }
    
    • 在剃刀视图中:

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

    这行得通!

    谢谢

    【讨论】:

    • 如果我还需要在 new { html 属性 } 中提供 id 和 class 怎么办,那么它将如何通用
    • 我对同一个问题的回答,它保留了从 HTML/标记传递的任何 { html 属性}:stackoverflow.com/a/47597356/1906278
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多