您的问题不是很清楚该Status
物业的基本类型是什么。如果是CheckStatus
,那么@Html.DisplayFor(modelItem => item.Status)
将完全显示您的期望。另一方面,如果它是一个整数,您可以编写一个自定义助手来显示正确的值:
public static class HtmlExtensions
{
public static IHtmlString DisplayEnumFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, int>> ex, Type enumType)
{
var value = (int)ModelMetadata.FromLambdaExpression(ex, html.ViewData).Model;
string enumValue = Enum.GetName(enumType, value);
return new HtmlString(html.Encode(enumValue));
}
}
然后像这样使用它:
@Html.DisplayEnumFor(modelItem => item.Status, typeof(CheckStatus))
让我们假设您希望将此帮助程序更进一步,并考虑您的枚举类型的 DisplayName 属性:
public enum CheckStatus
{
[Display(Name = "oh yeah")]
Yes = 1,
[Display(Name = "no, no, no...")]
No = 2,
[Display(Name = "well, dunno")]
Maybe = 3
}
以下是扩展我们的自定义助手的方法:
public static class HtmlExtensions
{
public static IHtmlString DisplayEnumFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, int>> ex, Type enumType)
{
var value = (int)ModelMetadata.FromLambdaExpression(ex, html.ViewData).Model;
string enumValue = Enum.GetName(enumType, value);
var field = enumType.GetField(enumValue);
if (field != null)
{
var displayAttribute = field
.GetCustomAttributes(typeof(DisplayAttribute), false)
.Cast<DisplayAttribute>()
.FirstOrDefault();
if (displayAttribute != null)
{
return new HtmlString(html.Encode(displayAttribute.Name));
}
}
return new HtmlString(html.Encode(enumValue));
}
}