HtmlHelper在MVC 6 vNext

时间:2016-02-23 16:27:51

标签: asp.net-core asp.net-core-mvc

问: 有没有办法使用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扩展来呈现标记助手的输出?

1 个答案:

答案 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