如何获取“description”属性而不是模型的“name”属性 - (MVC asp.net)

时间:2013-08-14 14:33:17

标签: c# asp.net-mvc asp.net-mvc-4 data-annotations

我有一个模特和一个领域......等等这是微不足道的。但是,我需要从我的视图中获取字段中的“描述”属性和您的“名称”属性。使用@Html ...可以使用“DisplayNameFor”返回,显而易见。但是,如何获得“描述”属性?没有像@ Html.DisplayDescription这样的助手?有可能得到这个吗?

[Column("abc")]
[Display(Description = "The Description", GroupName = "The Group", Name = "The Name")]
public string field { get; set; }

谢谢你的帮助。 对不起英语不好。 ;)

1 个答案:

答案 0 :(得分:16)

您可以从元数据中获取它:

@model MyViewModel

@{
    var description = ModelMetadata.FromLambdaExpression<MyViewModel, string>(x => x.field, ViewData).Description;
}

@description

或者如果你像我一样发现这个绝对可怕的代码要写在一个视图中你可以将它封装在一个可重用的帮助器中:

public static class HtmlExtensions
{
    public static IHtmlString DescriptionFor<TModel, TValue>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TValue>> expression
    )
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        var description = metadata.Description;
        return new HtmlString(description);
    }
}

因此,在您的视图中,您可以使用:

@model MyViewModel

@Html.DescriptionFor(x => x.field)