mam następujące metody pomocnika w ViewModelBase
klasy, która dziedziczy Zobacz inne modele:MVC.net get enum nazwa wyświetlana w widoku bez konieczności odwoływania się do typu enum w świetle
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;
}
I następnie zadzwonić to z punktu widzenia jak to:
<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
Pytanie brzmi - czy mogę pracować z tej metody, więc nie muszę powiedzieć, że ten typ enum
? Zasadniczo chciałbym todo to dla wszystkich enum
s:
@ Model.GetEnumDisplayName (Model.wheteverEnum)
Nie typeof
, nie T
, nie ma potrzeby, aby dodać odwołanie do przestrzeni nazw Enums
w Widoku ...
Możliwe?
+1 Bardzo ładne. Jest używany oryginalny kod Plus dodaje realizację kodu metody wydłużania łącznie jak to nazwać. – Nope
Dla c sompleteness sake, powinieneś dodać sprawdzenie, czy istnieją jakieś 'DisplayAttributes' zastosowane do wartości wyliczeniowej i zwrócić' value.ToString() 'jako domyślną, jeśli nie ma żadnych. W przeciwnym razie otrzymasz 'IndexOutOfRangeException' po wywołaniu' ((DisplayAttribute) attrs [0]). Name ' – flipchart
Jeśli ktoś próbuje połączyć się ze sterownikiem: DisplayName (id (MyEnum) id); –