我有一个WebGrid,它在一列中显示Status枚举。有几个枚举成员由两个单词组成,我想使用枚举的DisplayName
属性而不是默认的ToString()
表示,例如“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"),
我是否可以通过某种方式使用模型元数据获取此信息?
答案 0 :(得分:3)
我们遇到了同样的问题。我最终通过制作以下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" to" displayAttributes [0] .GetName()"。
答案 1 :(得分:0)
我面前没有VS,但也许你可以尝试一下......
[TypeConverter(typeof(PascalCaseWordSplittingEnumConverter))]
查看this article如何在下拉列表中使用它。