Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动关闭TagHelper合并同级元素的html标记_Html_Razor_Asp.net Core Mvc_Tag Helpers - Fatal编程技术网

自动关闭TagHelper合并同级元素的html标记

自动关闭TagHelper合并同级元素的html标记,html,razor,asp.net-core-mvc,tag-helpers,Html,Razor,Asp.net Core Mvc,Tag Helpers,我对ASP.NET核心MVC中引入的TagHelper的行为有点困惑。在本教程之后,我们有机会编写自动关闭标记。根据这篇文章,我们应该使用attbuteHtmlTargetElement。下面的类作为示例演示: [HtmlTargetElement("email", TagStructure = TagStructure.WithoutEndTag)] public class EmailTagHelper : TagHelper { private const string Emai

我对ASP.NET核心MVC中引入的
TagHelper
的行为有点困惑。在本教程之后,我们有机会编写自动关闭标记。根据这篇文章,我们应该使用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视图中的标记类似于:

<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>
支持:
为什么第一个锚定标记包含
标记内容?

没有
HtmlTargetElement
属性,在razor视图中使用关闭标记
,我的行为是正确的。

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

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);
}
这把剃刀:

<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>
支持:
营销: