2016-12-30 41 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