Ответ 1
Я думаю, что вы случайно использовали GenderType
вместо Gender
. Правильный синтаксис
<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
<option selected="selected" value="">Please select</option>
</select>
Я пытаюсь создать раскрывающийся список с свойством 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
не распознается и отображается как ошибка.
Кто-нибудь знает, как это решить?
Я думаю, что вы случайно использовали GenderType
вместо Gender
. Правильный синтаксис
<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
<option selected="selected" value="">Please select</option>
</select>
GenderType
- это ваше имя свойства, а не тип Enum. Метод GetEnumSelectList ожидает, что вы укажете ему тип Enumeration, а не имя свойства в вашей модели.
Попробуйте следующее:
Html.GetEnumSelectList<Gender>()
Вы можете просто использовать синтаксис Razor:
@Html.DropDownList("StudentGender",
Html.GetEnumSelectList<Gender>(),
"Select Gender",new { @class = "form-control" })
У меня такая же проблема, я сжег голову, ища решение!
Вы можете решить эту ситуацию, создав экземпляр модели в верхней части вашего вида, например:
@using CRM.Model;
@using YourSolution.Model
Да, это звучит слишком странно, но верьте мне, это работает! См. Мой ответ на мой собственный пост.
вы используете Gender для asp-items = "Html.GetEnumSelectList -GenderType-()" вместо GenderType
например asp-items = "Html.GetEnumSelectList -Gender-()"
Ниже было то, что работал для меня. Это необходимо и так, потому что само перечисление является классом, объявленным в области действия класса, который вы используете в качестве модели.
<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
}
}