tengo el siguiente método de ayuda en una clase ViewModelBase
, que se hereda por otros modelos de vista:MVC.net get enumeración nombre para mostrar en la vista sin tener que referirse al tipo de enumeración en vista
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;
}
entonces me llaman esto desde el punto de vista de esta manera:
<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
la pregunta es - puedo trabajar este método así que no tengo que decir que el tipo de la enum
? Básicamente me gustaría TODO esto para todos enum
s:
@ Model.GetEnumDisplayName (Model.wheteverEnum)
Sin typeof
, sin T
, sin necesidad de añadir una referencia al espacio de nombres Enums
en la vista ...
¿Posible?
+1 muy agradable. se utiliza el código original y añade la implementación del código del método de extensión que incluye cómo llamarlo – Nope
para c ompleteness sake, deberías agregar una comprobación de que hay cualquier 'DisplayAttributes' aplicado al valor enum y devolver' value.ToString() 'como valor predeterminado si no hay ninguno. De lo contrario, obtendrá un 'IndexOutOfRangeException' cuando llame a' ((DisplayAttribute) attrs [0]). Name' – flipchart
Si alguien intenta llamar desde el controlador: DisplayName ((MyEnum) id); –