我如何让我的 ASP.NET 核心标签助手自动关闭

How do I allow my ASP.NET Core tag helpers to be self-closing

我写了一个标签助手,我可以按如下方式使用...

<mytaghelper attr1="jim"></mytaghelper>

我希望能够将其缩短为...

<mytaghelper attr1="jim">

...或至少...

<mytaghelper attr1="jim"/>

但是,我无法让它工作。这是 Process 方法的一些示例代码...

public override void Process(TagHelperContext context, TagHelperOutput output) {
  output.TagName = "div";
  output.PreContent.SetHtmlContent("<div>");
  output.Content.SetHtmlContent("OUTPUT HTML GOES HERE");
  output.PostContent.SetHtmlContent("</div>");
  output.Attributes.Clear();
}

我尝试在 class...

上的 HtmlTargetElement 属性中添加 TagStructure 设置
[HtmlTargetElement("mytaghelper", TagStructure = TagStructure.WithoutEndTag)]

...不过好像没什么区别。 <mytaghelper attr1="jim"/> 生成 <div /><mytaghelper attr1="jim"></mytaghelper> 生成 <div></mytaghelper>

如果我将 TagStructure 设置为 NormalOrSelfClosing,则包含一个结束标记有效,但 <mytaghelper attr1="jim"/> 给出一个空的 <div />

谁能解释我需要做什么?

正确的语法是:

[HtmlTargetElement("mytaghelper", TagStructure = TagStructure.WithoutEndTag)]

它应该应用于 taghelper class,而不是 Process 方法。您可能已经在这样做了,但是您的问题中并不清楚。不过,我相信您仍然必须使用 self-closing 标记语法 (/>) 才能正常工作。

TagStructure.WithoutEndTag 能够仅使用开始标记或 self-closing 来编写标记,但输出将是 <div ><div/> 。 Self-closing 锚标签无效 HTML,因此您不想创建一个,但您可能想要创建一个 self-closing 的标签助手。标签助手在读取标签后设置 TagMode 属性 的类型。在 process 方法中添加以下代码行:

output.TagMode = TagMode.StartTagAndEndTag;

花点时间阅读 Author Tag Helpers in ASP.NET Core,其中完美地涵盖了这一点。