2016-12-30 39 views
0

我正在使用EnumDropDownListFor幫助器使用enums,ofcourse渲染下拉菜單。EnumDropDownListFor和刪除選擇標題

@Html.EnumDropDownListFor(model => model.MyProperty, "Select", new { @class = "combobox form-control" })  

model.MyProperty沒有價值降下來了Select作爲第一個項目,我不希望出現的選擇選項,所以我試着用

​​

,但現在我無法打開下拉列表在所有。

回答

1

null而不是字符串可能會導致你的代碼中調用其他一些EnumDropDownListFor過載,編輯你仍然調用一個你相信嗎?
下拉菜單應該仍然有枚舉值作爲選項列表。

您可以嘗試,而不是:

@Html.DropDownListFor(model => model.MyProperty, 
    EnumHelper.GetSelectList(typeof(YourEnum)), 
    new { @class = "combobox form-control" }) 

在你生成的HTML,它應該看起來像:

<select name="MyProperty" id="MyProperty"> 
    <option value="FirstEnumValue">FirstEnumLabel</option> 
    <option value="SecondEnumValue">SecondEnumLabel</option> 
    ... 
</select> 

順便說一句,在大多數的瀏覽器,它會默認選擇第一個非殘疾人選項,而不是像你可能期望的那樣保持空白。你可以用JavaScript來克服這個問題,通過明確地將它的值設置成一些無效值(對你的枚舉值列表無效)。

如果您同時希望您的選擇是強制性的(required屬性),那麼您可以通過html spec詢問禁止的東西。

如果選擇元件具有規定的必要屬性,不具有 指定的多個屬性,並且具有1的display size,則 選擇元件必須具有一個placeholder label option

而且該規範將其定義爲:

如果所需的屬性指定的選擇元件具有,不具有 指定的多個屬性,並且具有1的display size;並且如果 select元素的列表 選項(如果有)中的第一個選項元素的值是空字符串,並且該選項元素的父節點 節點是select元素(而不是optgroup元素),那麼該選項 選項是選擇元素的佔位符標籤選項

1

如何

@Html.EnumDropDownListFor(model => model.MyProperty, new { @class = "combobox form-control" }) 

MSDN

編輯:

如果你不想使默認文本作爲選擇選項,使用javascript使禁用的選項。

@Html.EnumDropDownListFor(model => model.MyProperty, "Select...", new { @class = "combobox form-control" }) 

但是,似乎沒有辦法將屬性添加到SelectListItem

<script> 
    document.getElementsByTagName("option")[0].disabled = true; 
</script> 
+0

nope,我無法打開。 – user1765862

+0

如果** model.MyProperty **沒有價值,你想要顯示什麼? – Davis

+0

課程的枚舉值。但沒有選擇標題。 – user1765862