使用enum作为ASP.NET MVC Core中的下拉列表

Dav*_*rpe 52 c# asp.net asp.net-mvc enums asp.net-core-mvc

我正在尝试使用Razor视图中的标记帮助程序在ASP.NET MVC Core中创建一个带有枚举属性的下拉列表:

这是模型:

public class PersonalMember : Member
{
    [Required, Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required, Display(Name = "Last Name")]
    public string LastName { get; set; }

    [EnumDataType(typeof(Gender))]
    public Gender GenderType { get; set; }
}

public enum Gender
{
    Male = 1,
    Female = 2
}
Run Code Online (Sandbox Code Playgroud)

以下是视图中表单的一部分:

<div class="form-group">
    <label asp-for="GenderType" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <select asp-for="GenderType" asp-items="Html.GetEnumSelectList<GenderType>()">
            <option selected="selected" value="">Please select</option>
        </select>
        <span asp-validation-for="GenderType" class="text-danger" />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,之后Html.GetEnumSelectList,GenderType无法识别并显示为错误.

有谁知道如何解决这个问题?

小智 59

我认为你不小心使用了GenderType而不是Gender.正确的语法是

<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
    <option selected="selected" value="">Please select</option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • 这应该是答案,它使用了现代标记帮助器,并向您展示了如何实现GetEnumSelectList &lt;Enum&gt;()来构建列表项。 (4认同)

ADy*_*son 55

GenderType是您的属性名称,而不是Enum类型.GetEnumSelectList方法要求您为其指定枚举的类型,而不是模型中属性的名称.

试试这个:

Html.GetEnumSelectList<Gender>()
Run Code Online (Sandbox Code Playgroud)

  • 在剃刀中,你需要用()围绕:@(Html.GetEnumSelectList <Gender>()); 因为razor将<>解释为html标签 (8认同)

小智 17

您只需使用Razor语法:

@Html.DropDownList("StudentGender", 
    Html.GetEnumSelectList<Gender>(),
    "Select Gender",new { @class = "form-control" })
Run Code Online (Sandbox Code Playgroud)


Rog*_*edo 8

我遇到了同样的问题,我烧了我的头寻找解决方案!

您可以解决这种情况,在您的视图之上实例化您的模型,例如:

@using CRM.Model;
Run Code Online (Sandbox Code Playgroud)

@using YourSolution.Model

是的,这听起来太奇怪了,但相信我,它有效!在我自己的帖子中查看我的答案。

在 ASP.NET Core MVC 中选择 ENUM Tag Helper


小智 7

以下是对我有用的内容。这是必要的,因为枚举本身是在您用作模型的类的范围内声明的类。

<select asp-for="Status" class="form-control" asp-items="@Html.GetEnumSelectList<Cart.CartStatus>()"></select>
Run Code Online (Sandbox Code Playgroud)

在我的模型下方(正在进行中)以供参考

 public class Cart
    {
        public int CartId { get; set; }
        public List<Order> Orders { get; set; }
        [Required]
        public string UserId { get; set; }
        public DateTime DeliveryDate { get; set; }
        public CartStatus Status { get; set; }
        public enum CartStatus
        {
            Open = 1,
            Confirmed = 2,
            Shipped = 3,
            Received = 4
        }
    }
Run Code Online (Sandbox Code Playgroud)


Min*_*Van 7

当DropDownList中有选中的选项时,需要一个案例来编辑案例

在 ASP.NET 5 (MVC 6) 中使用枚举选择 TagHelper

public enum Gender {
  [Display(Name = "Male")]Male = 1,
  [Display(Name = "Female N")]Female = 2,
  [Display(Name = "Other")]Other = 3 
}
Run Code Online (Sandbox Code Playgroud)

**对于编辑案例:

@Html.DropDownListFor(m => m, Html.GetEnumSelectList(typeof(Gender)))
@Html.DropDownListFor(m => m.Gender, Html.GetEnumSelectList<Gender>()))

@Html.DropDownListFor(m => m.Gender, Html.GetEnumSelectList<Gender>(), "Select", new { @class = "form-control" })
Run Code Online (Sandbox Code Playgroud)

**对于正常情况:

<select asp-for="Gender" asp-items="@Html.GetEnumSelectList<Gender>()">
   <option selected="selected" value="">Please select</option>
</select>

<select asp-for="Gender" asp-items="ViewBag.Genders"></select>

@Html.DropDownList("Gender", Html.GetEnumSelectList<Gender>(), "Select", new { @class = "form-control" })
Run Code Online (Sandbox Code Playgroud)