我有一个ViewModelBase
类,它是由其它视图模型继承了以下辅助方法:MVC.net GET枚举显示名称中视图,而不必指枚举类型鉴于
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;
}
我然后调用这从这样的观点:
<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
的问题是 - 我可以工作,这个方法,所以我没有告诉它enum
的类型?基本上,我想这待办事项所有enum
S:
@ Model.GetEnumDisplayName(Model.wheteverEnum)
没有typeof
,没有T
,无需参考在视图中添加到Enums
命名空间...
可能吗?
+1非常好的。它使用的原始代码加上添加的代码实现的扩展方法,包括如何调用它。 – Nope 2012-02-17 13:44:54
对于c为了完整起见,你应该添加一个检查,如果没有任何''DisplayAttributes'应用于枚举值并返回'value.ToString()'作为默认值。否则,当你调用'((DisplayAttribute)attrs [0])时,你会得到一个'IndexOutOfRangeException'.Name' – flipchart 2013-07-16 09:31:43
如果有人试图从控制器调用:DisplayName((MyEnum)id); – 2013-10-02 08:40:24