【问题标题】:How do I get the display name attribute for an enumerable on an index page如何获取索引页上可枚举的显示名称属性
【发布时间】:2021-08-06 17:07:28
【问题描述】:

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

我的枚举是这样的:

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)

我尝试过使用this suggestion,但最终遇到了一些奇怪的错误,无法使其正常工作。如果有人知道如何从枚举中获取属性,那么我将非常感谢您的帮助。

【问题讨论】:

    标签: c# asp.net-core model-view-controller razor


    【解决方案1】:

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

    枚举扩展:

    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)
    }
    

    结果:

    【讨论】:

    • 有没有办法以一种我不必指定 UserStatus.x 或 UserStatus.y 的方式获取枚举名称,而是在将值传递给它时获取这些名称,也许是for 循环?
    • 是的,抱歉,您更新的答案对我帮助很大。对迟到的回复表示歉意,只是我有一些错误导致它无法按预期工作,但它们完全是我自己的错误,你的回答很好。
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 2012-10-17
    • 2020-11-04
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多