2014-06-09 77 views
4

在我的剃须刀视图中,我使用了一个下拉列表。我想禁用此控件(不可选)。已禁用DropDownList剃须刀mvc

我的代码是:

<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页面。

任何人有想法?

+0

什么是'Model.LinguaMadreList'的返回类型? – DavidG

+0

'code' public IEnumerable LinguaMadreList {get;组; } – nolanofra

+0

对不起,忘了也问一下'model.LinguaCodiceMadre'是什么类型? – DavidG

回答

1

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

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

This Works!

谢谢

+0

如果我还需要为新的{html属性}提供id和class,那么它将如何变为泛型 –

+0

我对同一问题的回答保留了从HTML /标记传递的所有{html属性}:https: //stackoverflow.com/a/47597356/1906278 – brsfan

8

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

<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> 

问候意味着问题

+1

我确认'@ disabled =“disabled”'也适用于MVC5。 – mxmissile

+0

w3schools html下拉禁用http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_disabled –

+1

问题依然存在。我试过 new{@disabled=Model.IsDisabled? “disabled”:“false”} 和 new {disabled = Model.IsDisabled? “disabled”:“false”} 但没有任何内容,禁用的属性不在html页面上呈现。 – nolanofra

3

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

对于JavaScript中使用以下逻辑:

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

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

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

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

}); 

这里是小提琴演示,我试图为你这是完全worling

Fiddle Demo

  1. 我有两个属性模特
  2. 我在控制器的DropDown中填充测试数据用于演示目的(在你的情况下它将来自数据库)
  3. 在视图上,我将ID分配给两个输入。
  4. 最后,在视图下方有Javascript函数,它驱动CheckBox查看是否被选中或不选中,如果它被选中,则不能从DropDown中选择任何值,否则它将打开选择值。