首页 > 解决方案 > 可空枚举下拉列表无法按预期工作

问题描述

我有一个模型,其中包含一个可以为空的枚举,如下所示:

public class UserSearch : GenericSearch
{
    [Display(Name="User Status", Description = "Filter results by user status")]
    public UserStatus? UserStatus { get; set; } = new UserStatus();
}

public enum UserStatus
{
    Active,
    Inactive,
    Locked
}

我请求模型的编辑器模板,如下所示:

@Html.EditorFor(x => x.UserStatus)

我的“Enum.cshtml”模板如下:

@model Enum
<div class="form-group">
    <label asp-for="@Model" class="m-b-none d-block"></label>
    <help-text asp-for="@Model"></help-text>
    <div class="input-group">
        <select asp-for="@Model" asp-items="@new SelectList(Enum.GetValues(Model.GetType()))" class="form-control">
            <option value="">Please select an option</option>
        </select>
        <partial name="_ValidationIcon" />
    </div>
    <span asp-validation-for="@Model" class="validation-message"></span>
</div>

这呈现如下: 在此处输入图像描述

问题:

如果我使我的UserStatus不可为空,则标签会呈现:

在此处输入图像描述

例如

public class UserSearch : GenericSearch
{
    [Display(Name = "User Status", Description = "Filter results by user status")]
    public UserStatus UserStatus { get; set; } = new UserStatus();
}

为什么是这样?

相比之下,在一个较旧的 MVC5 项目中,无论 Enum 是否可以为空,我都有以下工作:

@model Enum
@Html.LabelFor(m => m, new { @class = "m-b-none" })
@Html.DescriptionFor(m => m)
<div class="input-group">
    @Html.EnumDropDownListFor(m => m, new { @class = "form-control" })
    @Helpers.ValidationIcon()
    @Html.ValidationMessageFor(m => m, null, new { @class = "validation-message" })
</div>

我尝试改用 @Html.LabelFor 而不是标签标签助手,但得到了相同的结果。

标签: asp.netasp.net-core

解决方案


推荐阅读