问: 有没有办法使用IHtmlHelper扩展来呈现标记助手的输出?
信息: 我正在使用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 = $@"<cache expires-after='{@TimeSpan.FromSeconds(5)}'>
<div custom-tag-helper-parm = '{customTagHelperParm}'>
</div>
</cache>";
return new HtmlString(output);
}
目前,正如预期的那样,HTML按字面输出。换句话说,<cache>
和custom-tag-helper-parm
TagHelper都不会被处理。
有没有办法使用像这样的IHtmlHelper扩展来呈现标记助手的输出?
答案 0 :(得分:0)
如果我的理解是正确的,你想做类似
的事情@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?