ASP.Net核心:从一个标签助手输出2个标签
ASP.Net Core: Output 2 tags from one tag helper
使用 ASP.Net Core 的 Tag Helpers,有没有办法在根级别将 1 个标签转换为 2 个标签?我知道您可以使用 TagHelperOutput.TagName == null
完全删除一个标签,但我想知道如何做相反的事情来输出多个标签。
例如,从:
<canonical href="/testing" />
至:
<link rel="canonical" href="http://www.examples.com/widgets" />
<link rel="next" href="http://www.examples.com/widgets?page=2" />
这是一个示例标签助手,它输出一个标签,但不输出两个标签:
[HtmlTargetElement("canonical")]
public class CanonicalLinkTagHelper : TagHelper
{
public string Href { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "link";
output.Attributes.SetAttribute("rel", "canonical");
output.Attributes.SetAttribute(new TagHelperAttribute("href", new HtmlString(Href)));
}
}
根据 this documentation,使用 TagHelperOutput.TagName == null
删除标签后,您必须能够使用 output.PostContent.AppendHtml()
添加自定义 HTML
更新
PostContent
只是追加在后面。要替换全部内容,您需要使用 output.Content.SetHtmlContent(
TagHelpers可以输出任意数量的html你需要,只需要使用output.Content写输出。这是一个基本示例:
[HtmlTargetElement("canonical")]
public class CanonicalTagHelper : TagHelper
{
public string Link1Rel { get; set; }
public string Link2Rel { get; set; }
public string Link1Href { get; set; }
public string Link2Href { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = null;
outputLink(Link1Rel, Link1Href, output);
outputLink(Link2Rel, Link2Href, output);
}
private void outputLink(string rel, string href, TagHelperOutput output)
{
TagBuilder link = new TagBuilder("link");
link.Attributes.Add("rel", rel);
link.Attributes.Add("href", href);
link.TagRenderMode = TagRenderMode.SelfClosing;
output.Content.AppendHtml(link);
}
}
用法:
<canonical link1-href="https://link1.com" link1-rel="canocical" link2-href="https://link2.com" link2-rel="next"></canonical>
输出:
<link href="https://link1.com" rel="canocical">
<link href="https://link2.com" rel="next">
使用 ASP.Net Core 的 Tag Helpers,有没有办法在根级别将 1 个标签转换为 2 个标签?我知道您可以使用 TagHelperOutput.TagName == null
完全删除一个标签,但我想知道如何做相反的事情来输出多个标签。
例如,从:
<canonical href="/testing" />
至:
<link rel="canonical" href="http://www.examples.com/widgets" />
<link rel="next" href="http://www.examples.com/widgets?page=2" />
这是一个示例标签助手,它输出一个标签,但不输出两个标签:
[HtmlTargetElement("canonical")]
public class CanonicalLinkTagHelper : TagHelper
{
public string Href { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "link";
output.Attributes.SetAttribute("rel", "canonical");
output.Attributes.SetAttribute(new TagHelperAttribute("href", new HtmlString(Href)));
}
}
根据 this documentation,使用 TagHelperOutput.TagName == null
删除标签后,您必须能够使用 output.PostContent.AppendHtml()
更新
PostContent
只是追加在后面。要替换全部内容,您需要使用 output.Content.SetHtmlContent(
TagHelpers可以输出任意数量的html你需要,只需要使用output.Content写输出。这是一个基本示例:
[HtmlTargetElement("canonical")]
public class CanonicalTagHelper : TagHelper
{
public string Link1Rel { get; set; }
public string Link2Rel { get; set; }
public string Link1Href { get; set; }
public string Link2Href { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = null;
outputLink(Link1Rel, Link1Href, output);
outputLink(Link2Rel, Link2Href, output);
}
private void outputLink(string rel, string href, TagHelperOutput output)
{
TagBuilder link = new TagBuilder("link");
link.Attributes.Add("rel", rel);
link.Attributes.Add("href", href);
link.TagRenderMode = TagRenderMode.SelfClosing;
output.Content.AppendHtml(link);
}
}
用法:
<canonical link1-href="https://link1.com" link1-rel="canocical" link2-href="https://link2.com" link2-rel="next"></canonical>
输出:
<link href="https://link1.com" rel="canocical">
<link href="https://link2.com" rel="next">