2017-04-18 48 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。我已經改變它使用系統,現在我看到沒有問題。 –

相關問題