从EnumDropDownListFor(...)中删除空白条目?

时间:2018-01-15 19:37:32

标签: c# asp.net-mvc enums html-helper

我发现了一些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
}

1 个答案:

答案 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)