如何允许我的 ASP.NET Core 标记助手自动关闭

Avr*_*oel 4 tag-helpers asp.net-core asp.net-core-tag-helpers

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

<mytaghelper attr1="jim"></mytaghelper>
Run Code Online (Sandbox Code Playgroud)

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

<mytaghelper attr1="jim">
Run Code Online (Sandbox Code Playgroud)

...或者至少...

<mytaghelper attr1="jim"/>
Run Code Online (Sandbox Code Playgroud)

但是,我无法让它发挥作用。这是 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();
}
Run Code Online (Sandbox Code Playgroud)

我曾尝试向类上的属性添加TagStructure设置HtmlTargetElement...

[HtmlTargetElement("mytaghelper", TagStructure = TagStructure.WithoutEndTag)]
Run Code Online (Sandbox Code Playgroud)

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

如果我设置TagStructureNormalOrSelfClosing然后包含一个结束标记有效,但<mytaghelper attr1="jim"/>给出一个空的<div />

任何人都能够解释我需要做什么?

Xue*_*hen 9

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

output.TagMode = TagMode.StartTagAndEndTag;
Run Code Online (Sandbox Code Playgroud)

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