在自定义htmlhelper中使用html.display



我有一个自定义的htmlhelper扩展名,我需要在此助手内使用html.display。如何像在视图中一样使用它?

我有实体,所有这些都从具有ID,CANCETON等的基础上继承...

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

您可以使用内置的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)

最新更新