2014-06-09 79 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中選擇任何值,否則它將打開選擇值。