2017-04-18 8 views
-1

私はカスタムHtmlHelper拡張があり、このヘルパー内でHtml.DisplayForを使用する必要があります。どのようにビューのように使用することは可能ですか?カスタムHtmlHelperでHtml.DisplayForを使用

私は...それらのすべては、ID、CreatedOnなどがありBaseEntityから継承する、実体を持た

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メソッドを利用することができます(あなたはを含める必要があり注意)

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

問題は、FuncにAntlr.Runtime.Miscを使用することに関連していました。私はSystemを使用するように変更しましたが、今は問題がないことがわかります。 –

関連する問題