2009-10-28 129 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" 
     } 
)