为什么 TagHelper HtmlAttributeName 未在 ASP.NET Core 2.2 中解析
Why is the TagHelper HtmlAttributeName not resolved in ASP.NET Core 2.2
我正在开发自定义 TagHelper,为此我使用了 Microsoft 中的示例。
public class EmailTagHelper : TagHelper
{
private const string EmailDomain = "contoso.com";
// Can be passed via <email mail-to="..." />.
// PascalCase gets translated into kebab-case.
[HtmlAttributeName("mail-to")]
public string MailTo { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a"; // Replaces <email> with <a> tag
var content = await output.GetChildContentAsync();
var target = content.GetContent() + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + target);
output.Content.SetContent(target);
}
}
我在这些例子中使用了它:
<email>Support</email>
<email mail-to="Support"></email>
第一个示例按预期工作并给出以下输出:
<a href="mailto:Support@contoso.com">Support@contoso.com</a>
但是第二个例子,其中使用了mail-to
HtmlAttributeName
,没有解析,如下图
<a href="mailto:@contoso.com">@contoso.com</a>
到目前为止,这已经花了我一个下午的时间,之后我可能会撞到脑袋,但是有人能告诉我为什么这不起作用吗?
您已声明 MailTo
并将其绑定到 mail-to
属性,但您没有在 ProcessAsync
中使用 MailTo
。相反,您 总是 使用 GetChildContentAsync()
方法来获取内容。
如果同时提供 mail-to
和内容等,您需要决定哪个优先或是否要生成某种异常。这是一个更喜欢该属性的粗略示例,为了完整性:
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
var mailTo = MailTo;
if (string.IsNullOrWhiteSpace(mailTo))
{
var content = await output.GetChildContentAsync();
mailTo = content.GetContent();
}
var target = mailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + target);
output.Content.SetContent(target);
}
我正在开发自定义 TagHelper,为此我使用了 Microsoft 中的示例。
public class EmailTagHelper : TagHelper
{
private const string EmailDomain = "contoso.com";
// Can be passed via <email mail-to="..." />.
// PascalCase gets translated into kebab-case.
[HtmlAttributeName("mail-to")]
public string MailTo { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a"; // Replaces <email> with <a> tag
var content = await output.GetChildContentAsync();
var target = content.GetContent() + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + target);
output.Content.SetContent(target);
}
}
我在这些例子中使用了它:
<email>Support</email>
<email mail-to="Support"></email>
第一个示例按预期工作并给出以下输出:
<a href="mailto:Support@contoso.com">Support@contoso.com</a>
但是第二个例子,其中使用了mail-to
HtmlAttributeName
,没有解析,如下图
<a href="mailto:@contoso.com">@contoso.com</a>
到目前为止,这已经花了我一个下午的时间,之后我可能会撞到脑袋,但是有人能告诉我为什么这不起作用吗?
您已声明 MailTo
并将其绑定到 mail-to
属性,但您没有在 ProcessAsync
中使用 MailTo
。相反,您 总是 使用 GetChildContentAsync()
方法来获取内容。
如果同时提供 mail-to
和内容等,您需要决定哪个优先或是否要生成某种异常。这是一个更喜欢该属性的粗略示例,为了完整性:
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
var mailTo = MailTo;
if (string.IsNullOrWhiteSpace(mailTo))
{
var content = await output.GetChildContentAsync();
mailTo = content.GetContent();
}
var target = mailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + target);
output.Content.SetContent(target);
}