Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取索引页上可枚举项的显示名称属性_C#_Asp.net Core_Model View Controller_Razor - Fatal编程技术网

C# 如何获取索引页上可枚举项的显示名称属性

C# 如何获取索引页上可枚举项的显示名称属性,c#,asp.net-core,model-view-controller,razor,C#,Asp.net Core,Model View Controller,Razor,我的目标是从我的枚举中获取displayname属性,这样我就可以在索引页上显示它们的值,而不会有奇怪的格式,也不会有清晰可读的行 我的可枚举项如下所示: public enum UserStatus { [Display(Name = "Display Name 1")] _x = 0, [Display(Name = "Display Name 2")] _y = 1,

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

我的可枚举项如下所示:

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)

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

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

枚举扩展:

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;
        }
       
    }
视图:

结果:

更新:

视图:

结果:


是否有一种方法可以获取枚举名,而不必指定UserStatus.x或UserStatus.y,而是在值传递到枚举名时获取这些名称,可能是for循环?您好,我的更新答案有用吗?是的,很抱歉,您的更新答案帮了我大忙。对迟来的回复表示歉意只是因为我这方面有一些错误,导致这项工作没有按预期进行,但这些都是我自己的错误,你的回答非常有效。
@EnumExtensions.DisplayName(UserStatus._x)
@EnumExtensions.DisplayName(UserStatus._y)
@EnumExtensions.DisplayName(UserStatus._z)
@foreach (UserStatus userStatus in (UserStatus[])Enum.GetValues(typeof(UserStatus)))
{
    @EnumExtensions.DisplayName(userStatus)
}