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

Remove blank entry from EnumDropDownListFor(...)?

我找到了一些 S.O。有关此问题的帖子,但 none 已接受的答案对我有用。我正在使用 enum 创建一个 EnumDropDownListFor 并且它正在工作,但我不想在下拉列表的顶部有一个空白条目。我希望用户被迫接受 enum 中的一项。代码如下:

@Html.EnumDropDownListFor(m => m.Foo, new { @class = "input-block-level " + Model.FooThingType, autocomplete = "off", style = "width: 100px;" })

注意上面的内容,我已经根据其他 S.O 中接受的答案尝试了几种变体。帖子,包括在 EnumDropDownListFor(...) 调用中添加和删除各种参数。这只会导致编译时错误,主要是 "no version of EnumDropDownListFor() takes n arguments" 错误。例如:

@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
}

您没有显示模型,但显然您的 属性 可以为空,即

public SomeEnum? Foo { get; set }

允许 null 值,因此 EnumDropDownListFor() 方法生成一个 null 选项,以便可以选择它。

您可以使 属性 不可为空(这将删除 null 选项)

public SomeEnum Foo { get; set }

或更好,让它可以为空并添加 [Required] 属性以强制用户进行选择以防止发布不足的攻击(请参阅 了解详细说明)

[Required(ErrorMessage = "Please select a ... ")]
public SomeEnum Foo { get; set }

并在视图中添加

@Html.EnumDropDownListFor(m => m.Foo, new { ... })
@Html.ValidationMessageFor(m => m.Foo)