wake-up-neo.com

Verwenden der Aufzählung für eine Dropdownliste in ASP.NET MVC Core

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.GetEnumSelectListGenderType nicht erkannt wird und als Fehler angezeigt wird.

Weiß jemand, wie man das löst?

33
David Sharpe

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>()
42
ADyson

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

Sie können einfach die Razor-Syntax verwenden:

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

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.

ENUM Tag Helper in ASP.NET Core MVC auswählen

3
Rogerio Azevedo

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
        }
    }
0
Daniel Paiva

sie verwenden Gender für asp-items = "Html.GetEnumSelectList -GenderType- ()" statt GenderType

wie asp-items = "Html.GetEnumSelectList -Gender- ()"

0
Mehdi