MVC.net获取枚举显示名称视图,而无需参考枚举类型,鉴于 [英] MVC.net get enum display name in view without having to refer to enum type in view

查看:508
本文介绍了MVC.net获取枚举显示名称视图,而无需参考枚举类型,鉴于的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 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 enums:

@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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆