获取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"),
是否有某种方法可以使用模型元数据获得此信息?
我们遇到了同样的问题。我最终解决了这个问题,使以下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))]
查看这篇文章,了解如何在下拉列表中使用它