gpt4 book ai didi

html - 自闭 TagHelper 合并兄弟元素的 html 标记

转载 作者:太空狗 更新时间:2023-10-29 13:15:09 27 4
gpt4 key购买 nike

我对 TagHelper 的行为有点困惑在 ASP.NET Core MVC 中引入。按照本教程 A working email Tag Helper我们有机会编写自关闭标签。根据为此目的的文章,我们应该使用 attbute HtmlTargetElement .以下类作为示例进行演示:

 [HtmlTargetElement("email", TagStructure = TagStructure.WithoutEndTag)]
public class EmailTagHelper : TagHelper
{
private const string EmailDomain = "contoso.com";
public string MailTo { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
var address = MailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + address);
output.Content.SetContent(address);
}
}

razor View 中的标记如下:

<strong>Support:</strong>
<email mail-to="Support"/><br />
<strong>Marketing:</strong>
<email mail-to="Marketing"/>

但我有意想不到的输出:

<strong>Support:</strong>
<a href="mailto:Support@contoso.com">
<span>Another content</span>
<strong>Marketing:</strong>
</a>
<a href="mailto:Marketing@contoso.com"></a>

为什么第一个 anchor 标签包含<span><strong>标签内容?
没有 HtmlTargetElement属性和结束标签 </email>在 Razor View 中,我有正确的行为。

最佳答案

我运行了同样的例子并且能够产生同样的问题。调试时,我注意到输出的 TagMode 默认设置为 SelfClosing。这对 anchor 标记无效。然后,我将 anchor 的标记模式设置为 StartTagAndEndTag,并按预期生成了输出。

public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";

// ADD THIS LINE TO YOUR CODE
output.TagMode = TagMode.StartTagAndEndTag;

var address = MailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + address);
output.Content.SetContent(address);
}

这把 Razor :

<strong>Support:</strong><email mail-to="Support" /><br />
<strong>Marketing:</strong><email mail-to="Marketing" />

产生了这个输出:

<strong>Support:</strong><a href="mailto:Support@contoso.com">Support@contoso.com</a><br />
<strong>Marketing:</strong><a href="mailto:Marketing@contoso.com">Marketing@contoso.com</a>

关于html - 自闭 TagHelper 合并兄弟元素的 html 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38305085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com