Использование перечисления для раскрывающегося списка в ASP.NET MVC Core

Я пытаюсь создать раскрывающийся список с свойством enum в ASP.NET MVC Core с помощью помощника тега в представлении Razor:

Вот модель:

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
}

Вот часть формы в представлении:

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

Проблема заключается в том, что после Html.GetEnumSelectList, GenderType не распознается и отображается как ошибка.

Кто-нибудь знает, как это решить?

Ответы

Ответ 1

Я думаю, что вы случайно использовали GenderType вместо Gender. Правильный синтаксис

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

Ответ 2

GenderType - это ваше имя свойства, а не тип Enum. Метод GetEnumSelectList ожидает, что вы укажете ему тип Enumeration, а не имя свойства в вашей модели.

Попробуйте следующее:

Html.GetEnumSelectList<Gender>()

Ответ 3

Вы можете просто использовать синтаксис Razor:

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

Ответ 4

У меня такая же проблема, я сжег голову, ища решение!

Вы можете решить эту ситуацию, создав экземпляр модели в верхней части вашего вида, например:

@using CRM.Model;

@using YourSolution.Model

Да, это звучит слишком странно, но верьте мне, это работает! См. Мой ответ на мой собственный пост.

Выберите ENUM Tag Helper в ASP.NET Core MVC

Ответ 5

вы используете Gender для asp-items = "Html.GetEnumSelectList -GenderType-()" вместо GenderType

например asp-items = "Html.GetEnumSelectList -Gender-()"

Ответ 6

Ниже было то, что работал для меня. Это необходимо и так, потому что само перечисление является классом, объявленным в области действия класса, который вы используете в качестве модели.

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

ниже моей модели (работа в процессе) для справки

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