我正在使用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" })
但现在我根本无法打开下拉列表。
答案 0 :(得分:1)
怎么样
@Html.EnumDropDownListFor(model => model.MyProperty, new { @class = "combobox form-control" })
修改强>
如果您不想将默认文字作为选择选项,请使用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元素的占位符标签选项。