C# 如何获取索引页上可枚举项的显示名称属性
我的目标是从我的枚举中获取displayname属性,这样我就可以在索引页上显示它们的值,而不会有奇怪的格式,也不会有清晰可读的行 我的可枚举项如下所示: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,
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)
}