首页 > 解决方案 > 如何获取索引页上可枚举的显示名称属性

问题描述

我的目标是从我的枚举中获取显示名称属性,这样我就可以在索引页面上显示它们的值,而不会出现奇怪的格式,而是清晰易读的行。

我的枚举看起来像这样:

public enum UserStatus
{
        [Display(Name = "Display Name 1")]
        _x = 0,

        [Display(Name = "Display Name 2")]
        _y = 1,

        [Display(Name = "Display Name 3")]
        _z = 2
}

HTML 看起来像:

@Html.DisplayFor(modelItem => item.UserStatus)

我已经尝试过使用这个建议,但我最终遇到了一些奇怪的错误并且无法让它工作。如果有人知道如何从枚举中获取属性,那么我将非常感谢您的帮助。

标签: c#asp.net-coremodel-view-controllerrazor

解决方案


这是一个使用枚举值获取显示名称的演示:

枚举扩展:

public static class EnumExtensions
    {
        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;
        }
       
    }

看法:

@EnumExtensions.DisplayName(UserStatus._x)
@EnumExtensions.DisplayName(UserStatus._y)
@EnumExtensions.DisplayName(UserStatus._z)

结果:

在此处输入图像描述

更新:

看法:

@foreach (UserStatus userStatus in (UserStatus[])Enum.GetValues(typeof(UserStatus)))
{
    @EnumExtensions.DisplayName(userStatus)
}

结果:

在此处输入图像描述


推荐阅读