获取WebGrid中的Enum DisplayName

本文关键字:DisplayName Enum 中的 WebGrid 获取 | 更新日期: 2023-09-27 17:50:07

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

@grid.GetHtml(
    tableStyle: "webGrid",
    headerStyle: "header",
    alternatingRowStyle: "alt",
    mode: WebGridPagerModes.All,
    columns: grid.Columns(
        grid.Column("JobId", "Job ID"),
        grid.Column("Status", "Status", item =>
        {
            return ModelMetadata
                       .FromLambdaExpression(**What goes in here**)
                       .DisplayName;
        }),
        grid.Column("OutageType", "Outage Type"),

是否有某种方法可以使用模型元数据获得此信息?

获取WebGrid中的Enum DisplayName

我们遇到了同样的问题。我最终解决了这个问题,使以下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]"。

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

[TypeConverter(typeof(PascalCaseWordSplittingEnumConverter))]

查看这篇文章,了解如何在下拉列表中使用它