我发现了一些S.O.关于这个问题的帖子,但没有一个被接受的答案对我有用。我使用enum
创建EnumDropDownListFor
并且它正在运行,但我不希望在下拉列表的顶部显示空白条目。我希望用户被迫接受enum
中的一个项目。代码如下:
@Html.EnumDropDownListFor(m => m.Foo, new { @class = "input-block-level " + Model.FooThingType, autocomplete = "off", style = "width: 100px;" })
关于上述内容,我已根据其他S.O.中接受的答案尝试了几种变体。帖子,包括在EnumDropDownListFor(...)
调用中添加和删除各种参数。这只会导致编译时错误,主要是“没有版本的EnumDropDownListFor()需要 n 参数”错误。 E.g:
@Html.EnumDropDownListFor(m => m.Foo, null, new { @class = "input-block-level " + Model.FooThingType, autocomplete = "off", style = "width: 100px;" })
......或......
@Html.EnumDropDownListFor(m => m.Foo, "whatever", new { @class = "input-block-level " + Model.FooThingType, autocomplete = "off", style = "width: 100px;" })
枚举本身:
public enum SomeEnum
{
[Description("Thingie")]
Thingie,
[Description("AnotherThingie")]
AnotherThingie,
[Description("LastThingie")]
LastThingie
}
我也试过这个,但没有区别:
public enum SomeEnum
{
[Description("Thingie")]
Thingie = 0,
[Description("AnotherThingie")]
AnotherThingie = 1,
[Description("LastThingie")]
LastThingie = 2
}
答案 0 :(得分:1)
您没有向您展示模型,但显然您的财产可以为空,即
public SomeEnum? Foo { get; set }
允许null
值,因此EnumDropDownListFor()
方法会生成null
选项,以便可以选择它。
您可以使该属性不可为空(这将删除null
选项)
public SomeEnum Foo { get; set }
或更好,让它可以为空并添加[Required]
属性以强制用户进行选择以防止欠发布攻击(请参阅What does it mean for a property to be [Required] and nullable?获取详细说明)
[Required(ErrorMessage = "Please select a ... ")]
public SomeEnum Foo { get; set }
并在视图中添加
@Html.EnumDropDownListFor(m => m.Foo, new { ... })
@Html.ValidationMessageFor(m => m.Foo)