mal*_*owa 10 html razor asp.net-core-mvc tag-helpers
我对TagHelper
在ASP.NET Core MVC 中引入的行为感到困惑.按照本教程一个有效的电子邮件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);
}
}
Run Code Online (Sandbox Code Playgroud)
剃刀视图中的标记如:
<strong>Support:</strong>
<email mail-to="Support"/><br />
<strong>Marketing:</strong>
<email mail-to="Marketing"/>
Run Code Online (Sandbox Code Playgroud)
但我有意想不到的输出:
<strong>Support:</strong>
<a href="mailto:Support@contoso.com">
<span>Another content</span>
<strong>Marketing:</strong>
</a>
<a href="mailto:Marketing@contoso.com"></a>
Run Code Online (Sandbox Code Playgroud)
为什么第一个锚标记包含<span>
和<strong>
标记内容?
没有HtmlTargetElement
属性和</email>
剃刀视图中的结束标记我有正确的行为.
我运行了相同的示例,并且能够产生相同的问题。调试时,我注意到输出的TagMode默认设置为SelfClosing。这对于锚标记无效。然后,将锚的标记模式设置为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);
}
Run Code Online (Sandbox Code Playgroud)
剃刀:
<strong>Support:</strong><email mail-to="Support" /><br />
<strong>Marketing:</strong><email mail-to="Marketing" />
Run Code Online (Sandbox Code Playgroud)
产生此输出:
<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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
281 次 |
最近记录: |