Ich habe eine enum für eine der Eigenschaften meines View-Modells. Ich möchte eine Dropdown-Liste anzeigen, die alle Werte der Aufzählung enthält. Ich kann dies mit dem folgenden Code arbeiten.
Ich frage mich, ob es eine einfache Möglichkeit gibt, von einem Enum zu einem IEnumerable zu konvertieren? Ich kann es manuell wie im folgenden Beispiel tun, aber wenn ich einen neuen Enum-Wert hinzufüge, bricht der Code. Ich stelle mir vor, dass ich es durch Reflexion tun kann, wie in diesem Beispiel , aber gibt es andere Möglichkeiten, dies zu tun?
%Vor%Ich benutze einen Helfer, den ich gefunden habe hier , um meine SelectLists mit einem generischen Enum-Typ zu füllen, habe ich ein wenig modifiziert, um den ausgewählten Wert hinzuzufügen, so sieht es nun aus:
%Vor%Das Schöne daran ist, dass das DisplayAttribute als Titel und nicht als Name der Enumeration gelesen wird. (Wenn Ihre Enums Leerzeichen enthalten oder Sie eine Lokalisierung benötigen, erleichtert dies Ihr Leben).
Sie müssen also die Anzeige attirubete wie folgt zu Ihren enums hinzufügen:
%Vor%und so verwenden Sie sie in Ihren Ansichten.
%Vor% Model.statusType
ist nur ein Enum-Objekt vom Typ User_Status
.
Das ist es, nicht mehr SelectLists in Ihren ViewModels. In meinem Beispiel referenziere ich ein Enum in meinem ViewModel, aber Sie können den Enum-Typ direkt in Ihrer Ansicht referenzieren. Ich mache es nur, um alles sauber und nett zu machen.
Ich hoffe, das war hilfreich.
Ich bin sehr spät dran, aber ich habe gerade einen wirklich coolen Weg gefunden, dies mit einer Codezeile zu tun, wenn Sie die Unconstrained Melody NuGet-Paket (eine nette, kleine Bibliothek von Jon Skeet).
Diese Lösung ist besser, weil:
Also, hier sind die Schritte, um das zu erreichen:
Fügen Sie Ihrem Modell eine Eigenschaft wie folgt hinzu:
%Vor%Jetzt, da Sie die List of SelectListItem in Ihrem Modell verfügbar gemacht haben, können Sie @Html.DropDownList oder @ Html.DropDownListFor verwenden, wenn Sie diese Eigenschaft als Quelle verwenden.
Vielleicht ist es zu spät, aber ich denke, es könnte für Menschen mit dem gleichen Problem nützlich sein. Ich habe hier gefunden, dass jetzt mit MVC 5 ein EnumDropDownListFor enthalten ist HTML-Helfer, der nicht mehr die Verwendung von benutzerdefinierten Helfern oder anderen Problemumgehungen erfordert.
Fügen Sie in diesem speziellen Fall einfach Folgendes hinzu:
%Vor%und das ist alles!
Sie können den angezeigten Text auch über Datenanmerkungen und Ressourcendateien übersetzen oder ändern:
Fügen Sie Ihrer Enumeration folgende Datenanmerkungen hinzu:
%Vor%Erstellen Sie die entsprechende Ressourcendatei.
Tags und Links asp.net-mvc generics enums ienumerable