MVC.net获取枚举显示名称视图,而无需参考枚举类型,鉴于 [英] MVC.net get enum display name in view without having to refer to enum type in view
问题描述
我有一个 ViewModelBase
类,它是由其他视图模型继承了下面的辅助方法:
公共字符串GetEnumName< T>(枚举值)
{
键入enumType = typeof运算(T);
VAR enumValue = Enum.GetName(enumType,值);
的MemberInfo构件= enumType.GetMember(enumValue)[0]; VAR ATTRS = member.GetCustomAttributes(typeof运算(DisplayAttribute),FALSE);
VAR outString =((DisplayAttribute)ATTRS [0])名称。 如果(((DisplayAttribute)的attrs [0])。的ResourceType!= NULL)
{
outString =((DisplayAttribute)的attrs [0])的GetName();
} 返回outString;
}
然后我从这样的观点称此
< P>
@ {VAR相对= Model.GetEnumDisplayName< Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
&所述; / P>
问题是 - 我可以工作,这个方法,所以我没有告诉它的类型枚举
?基本上,我想这待办事项所有枚举
取值:
@ Model.GetEnumDisplayName(Model.wheteverEnum)
没有的typeof
,没有 T
,无需引用添加到枚举
命名空间中的视图...
可能?
您可以简单地删除类型参数,使其扩展方法。
公共静态字符串显示名称(此枚举值)
{
键入enumType = value.GetType();
VAR enumValue = Enum.GetName(enumType,值);
的MemberInfo构件= enumType.GetMember(enumValue)[0]; VAR ATTRS = member.GetCustomAttributes(typeof运算(DisplayAttribute),FALSE);
VAR outString =((DisplayAttribute)ATTRS [0])名称。 如果(((DisplayAttribute)的attrs [0])。的ResourceType!= NULL)
{
outString =((DisplayAttribute)的attrs [0])的GetName();
} 返回outString;
} @ Model.wheteverEnum.DisplayName()
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?
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()
这篇关于MVC.net获取枚举显示名称视图,而无需参考枚举类型,鉴于的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!