在自定义HtmlHelper中使用Html.DisplayFor

时间:2017-04-18 10:25:31

标签: c# asp.net-mvc html-helper

我有一个自定义的HtmlHelper扩展,我需要在这个帮助器中使用Html.DisplayFor。如何在视图中使用它?

我有实体,所有实体都继承自BaseEntity,它有Id,CreatedOn等......

public class BaseEntity
{
    [Key]
    public long Id { get; set; }

    [Display(Name = "Created On"), DisplayFormat(DataFormatString = "{0:dd.MM.yyyy HH:mm}")]
    public DateTime CreatedOn { get; set; }

    [Display(Name = "Updated On"), DisplayFormat(DataFormatString = "{0:dd.MM.yyyy HH:mm}")]
    public DateTime? UpdatedOn { get; set; }
}

助手:

public static class InfoExtensions
{
    public static IHtmlString Info(this HtmlHelper helper, BaseEntity m)
    {
        var sb = new StringBuilder();

        sb.Append($"{Html.DisplayNameFor(m.CreatedOn)}: {Html.DisplayFor(m.CreatedOn)}");
        sb.Append($"{Html.DisplayNameFor(m.UpdatedOn)}: {Html.DisplayFor(m.UpdatedOn)}");

        return new HtmlString(result.ToString());
    }
}

我试图输出一个html结果,如:

Created On: 15.04.2017 13:28
Updated On: 18.04.2017 15:36

1 个答案:

答案 0 :(得分:2)

您可以使用内置的HtmlHelper方法(请注意,您需要包含using System.Web.Mvc.Html;

public static MvcHtmlString InfoFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
    StringBuilder html = new StringBuilder();
    TagBuilder bold = new TagBuilder("b");
    bold.InnerHtml = helper.DisplayNameFor(expression);
    html.Append(bold);
    html.Append(helper.DisplayFor(expression));
    return MvcHtmlString.Create(html.ToString());
}

在视图中

@Html.InfoFor(m => m.CreatedOn)