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
已被选中。是否可以在不添加默认枚举值并检查未选择默认枚举值的情况下执行此操作?因为这看起来非常hacky。
答案 0 :(得分:2)
在幕后,Enums是数字。渲染页面时,您会看到选择“First”选项而不是“Please select ..”。这是因为带有文本“First”的选项的值为0
,0是int
类型的默认值。因此,当表单以“请选择”作为选项提交时,“MyEnum”的表单数据项将为空/ null,但由于类型为非可空类型,因此模型绑定器将设置第一个枚举选项。
您应该将类型更改为可以为空的枚举。
public class MyViewModel
{
[Required]
public MyEnum? MyEnum { get; set; }
}
现在,当用户选择“请选择”并提交表单时,该值将为NULL
而不是第一个枚举(0)