2009-10-28 133 views
48

使用MVC Html.DropDownList时,需要设置什么选项才能使下拉框为只读状态?Html.DropDownList - 已禁用/只读

我试过的东西....

Html.DropDownList("Types", Model.Types, new { _Enabled = "false" }) 

...并沿着这条线许多不同的事情;唉,没有快乐!

我认为这将是一个简单的.....它可能是!

+5

通知@Thomas'的回答。将Html.DropDownList标记为禁用可阻止表单发布其保存的值。如何禁用或只读的控件,但仍提交表格后的价值? – YeahStu

+0

如何使用一个布尔值禁用动态设置属性? – Superman

回答

107

试试这个

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" }) 
+3

这就是小狗。谢谢。 – ETFairfax

+21

但是通过这样做,下拉列表的绑定值不会在控制器中获得。 –

+0

试图使用它,但它无法工作,无论变化 @ Html.DropDownList(“Tug_ID”,model => model.Tug_ID,new {@disabled =“disabled”}) – New2This

3

或者你可以尝试这样的事:

Html.DropDownList("Types", Model.Types, new { @readonly = "true" }) 
+4

这是行不通的。该下拉列表显示为灰色,但仍然可用且可用。 – Kye

+0

嗨,我想要禁用/启用只有基于价值的特定页面的下拉菜单,我通过模型传递它。我尝试将true/false传递给残疾人,但它不起作用。可以帮助您解决这个问题 – ravithejag

5
<script type="text/javascript"> 
$(function() { 
     $(document) .ajaxStart(function() { 
       $("#dropdownID").attr("disabled", "disabled"); 
      }) 
      .ajaxStop(function() { 
       $("#dropdownID").removeAttr("disabled"); 

      }); 

}); 
</script> 
63

关于抓22:

如果我们使用@disabled,现场不发送到行动(Mamoud) 如果我们使用@readonly,下拉错误st生病让你改变的值

解决方法:使用@disabled,并添加隐藏下拉后场:

@Html.HiddenFor(model => model.xxxxxxxx) 

然后,它是真正的残疾人,并送到的动作了。

+9

这是我找到的最有用的解决方案。我不知道为什么它得到这么小的选票。 – Mikhail

+0

真的很好的提示。我只是在没有看到下面的评论的情况下才回答了答案,并且花了我2个小时才找到为什么在后发布中设置了零值。 – tete

+0

您必须小心使用此解决方案:MVC将打印两个带有属性的元素'id =“MyModelField”',如果你愿意使用JS与选择/隐藏元素进行交互,这可能会非常棘手。 – chteuchteu

1

我只是做到这一点,收工

Model.Id > -1 ? Html.EnumDropDownListFor(m => m.Property, new { disabled = "disabled" }) : Html.EnumDropDownListFor(m => m.Property) 
0

我已经创建上面提到的所有意见&答案后,这个答案。 这将解决下拉群体错误,即使它被禁用。

步骤01

Html.DropDownList("Types", Model.Types, new {@readonly="readonly"})

步骤02 这是CSS pointerevent除去代码。

<style type="text/css"> 
 
    #Types { 
 
     pointer-events:none; 
 
    } 
 
</style>
成熟

1

那么你可以有预期的结果

测试&我不得不禁用下拉列表和隐藏的主ID

<div class="form-group"> 
     @Html.LabelFor(model => model.OBJ_ID, "Objs", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("OBJ_ID", null, htmlAttributes: new { @class = "form-control", @disabled = "disabled"}) 
      @Html.HiddenFor(m => m.OBJ_ID) 
      @Html.ValidationMessageFor(model => model.OBJ_ID, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
0

风格

将这个
select[readonly] option, select[readonly] optgroup { 
     display: none; 
    } 
0
@Html.DropDownList("Types", Model.Types, new { @disabled = "" }) 

作品

0

HTML。DropDownList的( “类型”,Model.Types,新的{@disabled = “禁用”}) @ Html.Hidden(Model.Types) 和用于保存和恢复数据,使用隐藏控制

1

甲尖端可能对某些人显而易见,但不是其他人。

如果您使用的是基于DropDownListFor的HTML助手,那么您的ID将在HiddenFor输入中重复。因此,您将有重复的ID在HTML中无效,如果您使用JavaScript来填充HiddenForDropDownList,那么您将遇到问题。

的解决方案是手动设置的ID属性的htmlattributes阵列中...下面

@Html.HiddenFor(model => model.Entity) 

@Html.EnumDropDownListFor(
    model => model.Entity, 
    new { 
     @class = "form-control sharp", 
     onchange = "", 
     id =` "EntityDD", 
     disabled = "disabled" 
     } 
)