Asp.net core ASP.NET核心RC2标记HelperOutput.Content.Append更改
使用RC1,您可以构造一个新的TagBuilder,并将其附加到自定义TagHelper的输出中,如下所示: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
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);
}
}