Ich versuche, eine Dropdown-Liste mit einer Enumeneigenschaft in ASP.NET MVC Core zu erstellen, indem der Tag-Helper in einer Razor-Ansicht verwendet wird:
Hier ist das Modell:
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
}
Hier ist ein Teil eines Formulars in der Ansicht:
<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>
Mein Problem ist, dass nach Html.GetEnumSelectList
GenderType
nicht erkannt wird und als Fehler angezeigt wird.
Weiß jemand, wie man das löst?
GenderType
ist der Name Ihrer Eigenschaft, nicht der Aufzählungstyp. Die GetEnumSelectList-Methode erwartet, dass Sie den Typ der Aufzählung angeben, nicht den Namen der Eigenschaft im Modell.
Versuche dies:
Html.GetEnumSelectList<Gender>()
Ich denke, Sie haben versehentlich GenderType statt Gender verwendet. Die korrekte Syntax lautet
<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
<option selected="selected" value="">Please select</option>
</select>here
Sie können einfach die Razor-Syntax verwenden:
@Html.DropDownList("StudentGender",
Html.GetEnumSelectList<Gender>(),
"Select Gender",new { @class = "form-control" })
Ich hatte das gleiche Problem, ich verbrannte meinen Kopf und suchte nach einer Lösung!
Sie können diese Situation lösen, indem Sie Ihr Modell auf Ihrer Ansicht wie folgt instanziieren:
@using CRM.Model;
@ using YourSolution.Model
Ja, das hört sich zu seltsam an, aber glaubt mir, es funktioniert! Siehe meine Antwort in meinem eigenen Beitrag.
Das Folgende hat bei mir funktioniert. Dies ist notwendig und so, weil die Aufzählung selbst eine Klasse ist, die im Geltungsbereich der Klasse deklariert ist, die Sie als Modell verwenden.
<select asp-for="Status" class="form-control" asp-items="@Html.GetEnumSelectList<Cart.CartStatus>()"></select>
unter meinem Modell (in Arbeit) als Referenz
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
}
}
sie verwenden Gender für asp-items = "Html.GetEnumSelectList -GenderType- ()" statt GenderType
wie asp-items = "Html.GetEnumSelectList -Gender- ()"