Jestem trochę zmieszany z zachowaniem TagHelper
wprowadzonym w ASP.NET Core MVC. Po tym samouczku A working email Tag Helper mamy możliwość napisania samozamykających się tagów. Zgodnie z artykułem w tym celu powinniśmy używać attbute HtmlTargetElement
. Klasa poniżej demostrated jako przykład:Samozamykający TagHelper scala znaczniki html elementu rodzeństwa
[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);
}
}
Znaczniki w brzytwa widok jak:
<strong>Support:</strong>
<email mail-to="Support"/><br />
<strong>Marketing:</strong>
<email mail-to="Marketing"/>
Ale mam nieoczekiwane wyjście:
<strong>Support:</strong>
<a href="mailto:[email protected]">
<span>Another content</span>
<strong>Marketing:</strong>
</a>
<a href="mailto:[email protected]"></a>
Dlaczego pierwszy znacznik kotwicy zawiera <span>
i <strong>
treść tagów?
Bez atrybutu HtmlTargetElement
i ze znacznikami zamykającymi </email>
w widoku maszynowym Mam prawidłowe zachowanie.