我可以使DisplayNameFor(T)和LabelFor(T)产生单独的结果吗?

时间:2013-07-12 13:22:41

标签: asp.net-mvc data-annotations

我的模型有一些创建视图和一些索引视图,但我想要不同的标签(从数据注释生成)。

E.g。

我希望@Html.DisplayNameFor(model => model.Url)打印类似“页面网址”的内容,因为这是索引页面上我的表格的标题...

我希望@Html.LabelFor(modelItem => item.Url)打印“输入页面网址”之类的内容,因为它适用于创建视图。

我已经尝试查看注释,但我能找到的唯一属性似乎同时设置:

    [DisplayName("Page Url")]
    public string Url { get; set; }

有没有办法(除直接输入我的视图外)做我想做的事情?

1 个答案:

答案 0 :(得分:2)

使用Display属性而不是DisplayName,如下所示:

[Display(Name = "Page Url", Description = "Enter page Url")]
public string Url { get; set; }

然后,创建这个HtmlHelper:

public static MvcHtmlString DescriptionFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)
{
    var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    var description = metadata.Description;

    TagBuilder tagBuilder = new TagBuilder("span");
    tagBuilder.SetInnerText(description);
    return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}

并且,在这样的视图中使用它(对于描述):

@Html.DescriptionFor(model => model.Url)

而且,名称:

@Html.LabelFor(model => model.Url)