2017-04-18 33 views
-1

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

我有实体的,所有的人都从BaseEntity其中有身份证,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 
+0

'helper.DisplayFor()',但什么是'CreatedOn',什么是'BaseEntity'?你怎么在视图中使用它? –

+0

@StephenMuecke更新需要的细节 –

回答

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) 
+0

helper.DisplayNameFor和DisplayFor不可用。 –

+0

好的,问题是关于使用Antlr.Runtime.Misc for Func。我已经改变它使用系统,现在我看到没有问题。 –

相关问题