MVC.net get enum display name in view without having to refer to enum type in view
asp.net-mvc, asp.net-mvc-3, c#-4.0, enums, generics
Solution
You can simply remove the type parameter and make it an extension method.
public static string DisplayName(this Enum value)
{
Type enumType = value.GetType();
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;
}
@Model.wheteverEnum.DisplayName()
Problem
I have the following helper method in a `ViewModelBase` class, which is inherited by other view Models: ``` 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 then call this from the view like this: ``` <p> @{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); } @rel </p> ``` Question is - can I work this method so I don't have to tell it the type of the `enum`? Basically I'd like todo this for all `enum`s: @Model.GetEnumDisplayName(Model.wheteverEnum) No `typeof`, no `T`, no need to add a reference to the `Enums` namespace in the View... Possible?