EnumDropDownListFor并删除选择标题

时间:2016-12-30 09:49:29

标签: c# .net asp.net-mvc

我正在使用EnumDropDownListFor帮助程序来重新下载枚举,当然。

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

model.MyProperty没有值下拉时,Select作为第一项,我不想显示为选项,所以我尝试了

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

但现在我根本无法打开下拉列表。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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提出禁止的内容。

  

如果select元素指定了required属性,则没有   指定了一个多属性,且display size为1,然后是   select元素必须有placeholder label option

规范将其定义为:

  

如果select元素指定了required属性,则没有   指定了多个属性,其display size为1;而如果   select元素列表中第一个选项元素的值   options(如果有)是空字符串,以及该选项元素的父级   node是select元素(而不是optgroup元素),然后是   option是select元素的占位符标签选项