MVC.net bekommt den enum Anzeigenamen in der Ansicht, ohne auf den Enum-Typ in der Ansicht verweisen zu müssen
Habe ich folgende helper-Methode in eine ViewModelBase
Klasse, die geerbt wird, durch andere Modelle ansehen:
public string GetEnumName<T>(Enum value)
{
Type enumType = typeof(T);
var enumValue = Enum.GetName(enumType, value);
MemberInfo member = enumType.GetMember(enumValue)[0];
var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
var outString = ((DisplayAttribute)attrs[0]).Name;
if (((DisplayAttribute)attrs[0]).ResourceType != null)
{
outString = ((DisplayAttribute)attrs[0]).GetName();
}
return outString;
}
Ich dann rufen Sie diese aus der Ansicht wie diese:
<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
Frage ist - kann ich diese Methode, deshalb weiß ich nicht zu sagen, das es der Typ von der enum
? Im Grunde würde ich gerne todo für alle enum
s:
@Modell.GetEnumDisplayName(Modell.wheteverEnum)
Kein typeof
keine T
, keine Notwendigkeit, fügen Sie einen Verweis auf die Enums
- namespace in Sicht...
Möglich?
InformationsquelleAutor der Frage nathfy | 2012-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach entfernen Sie die Typ-parameter und machen es eine extension-Methode.
InformationsquelleAutor der Antwort jrummell
Konnte Sie nicht schreiben, dies als Erweiterung Methode? So etwas wie...
Verwendung:
InformationsquelleAutor der Antwort devdigital
Nice work @jrummell!
Ich habe ein kleine zwicken, unter denen fängt das Szenario, in denen ein enum nicht über einen zugeordneten Display Attribut (derzeit wirft er eine exception)
InformationsquelleAutor der Antwort toepoke.co.uk
Die Antwort von @jrummell in VB.NET für die wenigen von uns...
InformationsquelleAutor der Antwort Pierre Watelet
für alle, die erreichen könnte, um diese Frage, ich fand das viel einfacher als irgend etwas anderes:
https://www.codeproject.com/articles/776908/dealing-with-enum-in-mvc
Erstellen Sie einfach einen Ordner "DisplayTemplate" unter "Views\Shared", und erstellen Sie eine leere Ansicht (mit dem Namen "Enum") in den neuen Ordner "DisplayTemplate", und kopieren Sie diesen code, um es"
InformationsquelleAutor der Antwort Muhannad Al-Khodari
Hier ist eine Erweiterung Methode, die ich geschrieben habe, genau dies zu tun... es hat ein wenig zusätzlicher Logik, die es zu analysieren Enum-Namen und split durch Großbuchstaben. Sie knnen einen beliebigen Namen über das Display-Attribut
Dem GetAttribute Erweiterung Methoden könnte etwas overkill, aber ich benutze Sie an anderer Stelle in meine Projekte, so dass Sie wiederverwendet werden, wenn ich schrieb meine Enum-Erweiterung. Sie konnte sich einfach kombinieren Sie zurück in die ToFriendlyEnum(diese Enum-type) - Methode
InformationsquelleAutor der Antwort Anthony Shaw
Den vorgeschlagenen sollutions nicht für mich gearbeitet mit MVC3: so sind die Helfer, die unten gut ist.:
InformationsquelleAutor der Antwort Anis Saddoud