在RC2可以使用
output.Content.AppendHtml(tag);
菜单样本标签帮手:
观点:
<ul>
<menu action="Index" controller="Home">Home page</menu>
<menu action="List" controller="Home">List</menu>
</ul>
MenuTagHelper.cs:
[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);
}
}