c# - 如何获取索引页上可枚举的显示名称属性
问题描述
我的目标是从我的枚举中获取显示名称属性,这样我就可以在索引页面上显示它们的值,而不会出现奇怪的格式,而是清晰易读的行。
我的枚举看起来像这样:
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;
}
}
看法:
@EnumExtensions.DisplayName(UserStatus._x)
@EnumExtensions.DisplayName(UserStatus._y)
@EnumExtensions.DisplayName(UserStatus._z)
结果:
更新:
看法:
@foreach (UserStatus userStatus in (UserStatus[])Enum.GetValues(typeof(UserStatus)))
{
@EnumExtensions.DisplayName(userStatus)
}
结果:
推荐阅读
- firebase - 如何将数据推送到 Highchart Networkgraph 表单 firebase?
- python - 使用 boto3 的 StreamingBody.iter_lines() 遍历 S3 中的文件是否算作每行的 GET 请求?
- matlab - 以一定间距生成一定范围内的随机数
- typescript - 当键具有多种类型时,如何在构造函数中设置类型化 Map 的初始值
- netlogo - 受感染的 netlogo 模拟方法不起作用
- c# - 通过使用两个几乎相同的通用数据库访问类来强制执行 DRY
- python - PDFminer 仅在手动使 PDF 可搜索时才有效
- c - 如何在 C 中检查十六进制编码字符串中的“00”?
- c++ - 使用 std::vector 的 OpenCL 矩阵乘法
- c# - 文本叠加在另一个之上