Asp.net core ASP.NET核心RC2标记HelperOutput.Content.Append更改

Asp.net core ASP.NET核心RC2标记HelperOutput.Content.Append更改,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,使用RC1,您可以构造一个新的TagBuilder,并将其附加到自定义TagHelper的输出中,如下所示: public override void Process(TagHelperContext context, TagHelperOutput output) { var indicator = new TagBuilder("span"); indicator.AddCssClass("indicator"); output.Content.Append(indicat

使用RC1,您可以构造一个新的TagBuilder,并将其附加到自定义TagHelper的输出中,如下所示:

public override void Process(TagHelperContext context, TagHelperOutput output)
{
   var indicator = new TagBuilder("span");
   indicator.AddCssClass("indicator");
   output.Content.Append(indicator);
}
这在RC2中失败,因为
TagHelperOutput.Content.Append()
只接受
字符串

我可以随意使用
TagBuilder.WriteTo()
,但与实际情况相比,这似乎过于复杂了

有没有一种新方法可以构造新标记并附加到我错过的输出中?

在RC2中,您可以使用

output.Content.AppendHtml(tag);
菜单标记帮助器示例:

视图:

<ul>
  <menu action="Index" controller="Home">Home page</menu>
  <menu action="List" controller="Home">List</menu>
</ul>
[HtmlTargetElement(Attributes = "controller, action")]
public class MenuTagHelper : TagHelper
{
    public string Controller { get; set; }
    public string Action { get; set; }

    [ViewContext]
    public ViewContext ViewContext { get; set; }

    private readonly IUrlHelperFactory urlHelperFactory;

    public MenuTagHelper(IUrlHelperFactory urlHelperFactory)
    {
        this.urlHelperFactory = urlHelperFactory;
    }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        var sb = new StringBuilder();
        var urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
        var url = urlHelper.Action(Action, Controller);
        var text = (await output.GetChildContentAsync()).GetContent();

        output.TagName = "li";

        var a = new TagBuilder("a");
        a.MergeAttribute("href", $"{url}");
        a.MergeAttribute("title", text);
        a.InnerHtml.Append(text);

        var routeData = ViewContext.RouteData.Values;
        var currentController = routeData["controller"];
        var currentAction = routeData["action"];

        if (string.Equals(Action, currentAction as string, StringComparison.OrdinalIgnoreCase) && string.Equals(Controller, currentController as string, StringComparison.OrdinalIgnoreCase))
            output.Attributes.Add("class", "active");

        output.Content.AppendHtml(a);
    }
}