在dotnet核心中可能需要的ViewModel枚举?

时间:2018-05-24 21:35:04

标签: asp.net .net asp.net-core .net-core

public class MyViewModel
{
    [Required]
    public MyEnum MyEnum { get; set; }
}

public enum MyEnum
{
    First,
    Second
}

然后在我看来..

<form action="/Go/Here" method="post">
    <select asp-for="MyEnum" asp-items="Html.GetEnumSelectList<MyEnum>()">
    <option selected="selected" value="">Please Select..</option>
    </select>
<button type="submit" value="Submit">Submit</button>

我正在尝试生成一个生成的枚举表单,需要选择而不会默认为第一个值。但是,目前他们可以在选择Please Select..时提交,并且dotnet会认为MyEnum.First已被选中。是否可以在不添加默认枚举值并检查未选择默认枚举值的情况下执行此操作?因为这看起来非常h​​acky。

1 个答案:

答案 0 :(得分:2)

在幕后,Enums是数字。渲染页面时,您会看到选择“First”选项而不是“Please select ..”。这是因为带有文本“First”的选项的值为0,0是int类型的默认值。因此,当表单以“请选择”作为选项提交时,“MyEnum”的表单数据项将为空/ null,但由于类型为非可空类型,因此模型绑定器将设置第一个枚举选项。

您应该将类​​型更改为可以为空的枚举。

public class MyViewModel
{
    [Required]
    public MyEnum? MyEnum { get; set; }
}

现在,当用户选择“请选择”并提交表单时,该值将为NULL而不是第一个枚举(0)