2017-01-19 1 views
15

Ich versuche, eine Dropdown-Liste mit einer Enum-Eigenschaft in ASP.NET MVC-Core mit dem Tag-Helfer in einer Razor Ansicht zu erstellen:Mit ENUM für Drop-Down-Liste in ASP.NET MVC-Core

ist hier 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 in der Ansicht Teil eines Formulars:

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

Das Problem, das ich habe, ist, dass nach Html.GetEnumSelectList, GenderType nicht erkannt wird und zeigt als ein Fehler auf.

Weiß jemand, wie man das löst?

+2

versuchen es gerne angeben ... @ (Html.GetEnumSelectList ())“ –

+0

Warten, du bist immer noch erlaubt Geschlechter zu fragen, in der heutigen Zeit? – Nyerguds

Antwort

18

GenderType ist der Name Ihrer Eigenschaft, nicht der Enum-Typ. Die GetEnumSelectList-Methode erwartet, dass Sie ihr den Typ der Enumeration geben, nicht den Namen der Eigenschaft in Ihrem Modell.

Versuchen Sie folgendes:

Html.GetEnumSelectList<Gender>() 
+0

Vielleicht müssen markieren Sie es als Metadaten im asp-for wie: Html.GetEnumSelectList () .. Das OP hat nicht markiert, welche Version des MVC-Frameworks verwendet wird –

+0

Ich habe versucht Html.GetEnumSelectList () und Html.GetEnumSelectList () - sie beide als Fehler angezeigt –

+1

Welchen Fehler erhalten Sie, wenn Sie mein Beispiel oben verwenden? Das gleiche? Ich glaube nicht, Ihr zweites Beispiel ist gültige Syntax – ADyson

2

ich das gleiche Problem habe ich meinen Kopf gebrannt eine Lösung für das Schauen!

können Sie diese Situation zu lösen, Sie wie oben auf Ihrer Ansicht nach Modell instanziieren:

@using CRM.Model; 

@using YourSolution.Model

Ja, es ist zu seltsam klingt, aber glauben Sie mir, es funktioniert! Sehen Sie meine Antwort auf meinem eigenen Beitrag.

Select ENUM Tag Helper in ASP.NET Core MVC

2

Sie können einfach verwenden Razor-Syntax:

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

Ich glaube, Sie versehentlich GenderType statt Geschlecht verwendet. Die korrekte Syntax ist

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