C# 在WebGrid中获取Enum DisplayName

C# 在WebGrid中获取Enum DisplayName,c#,asp.net-mvc,webgrid,C#,Asp.net Mvc,Webgrid,我有一个WebGrid,它在一列中显示状态枚举。有两个枚举成员由两个单词组成,我想使用枚举的DisplayName属性,而不是默认的ToString()表示,例如,“OnHold”应显示为“On Hold” 有什么方法可以使用模型元数据获取这些信息吗?我面前没有VS,但也许你可以试试这个 [TypeConverter(typeof(PascalCaseWordSplittingEnumConverter))] 查看如何在下拉列表中使用它。我们也遇到了同样的问题。我最终通过以下HtmlHelpe

我有一个WebGrid,它在一列中显示状态枚举。有两个枚举成员由两个单词组成,我想使用枚举的
DisplayName
属性,而不是默认的
ToString()
表示,例如,“OnHold”应显示为“On Hold”


有什么方法可以使用模型元数据获取这些信息吗?

我面前没有VS,但也许你可以试试这个

[TypeConverter(typeof(PascalCaseWordSplittingEnumConverter))]

查看如何在下拉列表中使用它。

我们也遇到了同样的问题。我最终通过以下HtmlHelper扩展解决了这个问题:

    public static MvcHtmlString DisplayName(this HtmlHelper html, object value)
    {
        var displayAttributes = (DisplayAttribute[])value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false);
        if (displayAttributes == null || displayAttributes.Length == 0)
        {
            return new MvcHtmlString(value.ToString());
        }
        return new MvcHtmlString(displayAttributes[0].Name);
    }
然后可以将该列制作为:

    grid.Column("Status", "Status", item => Html.DisplayName(item.Status)),

编辑:对于全球化,请将“displayAttributes[0].Name”更改为“displayAttributes[0].GetName()”

谢谢Chris,我目前正在使用正则表达式在大写字母前添加空格,但这是一种黑客行为,知道属性中有可用信息,我更愿意使用它。
    grid.Column("Status", "Status", item => Html.DisplayName(item.Status)),