2016-02-23 42 views
1

問:有沒有方法使用IHtmlHelper擴展來呈現標記助手的輸出?HtmlHelper在MVC 6中呈現嵌套標籤助手vNext

信息:我使用ASP.NET 5/MVC 6(vNext)呈現在查看以下內容:

<cache expires-after="@TimeSpan.FromSeconds(5)"> 
    <div custom-tag-helper-parm="9289"></div>   
</cache> 

我現在有一個的HtmlHelper擴展方法寫此位的HTML:

public static HtmlString RenderPortalContent(this IHtmlHelper HtmlHelper, string customTagHelperParm) 
{    
     var output = [email protected]"<cache expires-after='{@TimeSpan.FromSeconds(5)}'> 
          <div custom-tag-helper-parm = '{customTagHelperParm}'> 
          </div> 
         </cache>";  

     return new HtmlString(output); 
} 

目前,正如所料,HTML是字面輸出。換句話說,<cache>custom-tag-helper-parm TagHelpers都不被處理。

有沒有辦法使用像這樣的IHtmlHelper擴展來呈現標記助手的輸出?

+0

你到底想要做什麼?具體來說,你想用「customTagHelperParm」做什麼?你打算怎麼打電話給這個幫手? –

+0

你可以創建自己的標籤助手來呈現嵌套標籤助手,而不是呈現嵌套標籤助手的HTML助手。例如見[這個答案](http://stackoverflow.com/questions/32692857/nesting-taghelpers-in-asp-net-5-mvc-6/32695324#32695324) –

回答

1

如果我的理解是正確的,你想要做的事就像

@Html.RenderPortalContent("blah") 
在你看來

。如果是這樣,你可以做這樣的事情:

public static HtmlString RenderPortalContent(this IHtmlHelper htmlHelper, string parameter) 
{ 
    var cache = new TagBuilder("cache"); 
    cache.Attributes.Add("expires-after", TimeSpan.FromSeconds(5).Seconds.ToString()); 
    var div = new TagBuilder("div"); 
    div.Attributes.Add("custom-tag-helper-parm", parameter); 

    cache.InnerHtml.Append(div); 

    var writer = new System.IO.StringWriter(); 
    cache.WriteTo(writer, new HtmlEncoder()); 
    return new HtmlString(writer.ToString()); 
} 

然而,如果你想擴展您的標籤,讓內標籤和更大的靈活性,你的實際需要編寫自己的TagHelper。幸運的是,這些寫起來並不難。


編輯:您是否嘗試過使用ViewComponents

+1

除非我失去了一些東西,這仍然似乎從字面上呈現了構建的HTML。即我在最終的HTML中獲得了一個實際的「」元素。如果我已經將該「」元素直接放入View文件中,它將被處理,並替換爲給定鍵的內存緩存中的內容。 –