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

时间:2019-05-14 13:40:07

标签: asp.net-core tag-helpers asp.net-core-tag-helpers

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

<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();
}

我尝试在类的TagStructure属性中添加HtmlTargetElement设置...

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

...但是似乎没有什么区别。 <mytaghelper attr1="jim"/>生成<div />,而<mytaghelper attr1="jim"></mytaghelper>生成<div></mytaghelper>

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

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

2 个答案:

答案 0 :(得分:1)

TagStructure.WithoutEndTag只能使用开始标签或自闭合标签来写入标签,但输出将为<div ><div/>。自闭合锚标记不是有效的HTML,因此您不想创建一个,但是您可能想要创建一个自闭合标记帮助器。标记助手在读取标记后设置TagMode属性的类型。在处理方法内添加以下代码行:

output.TagMode = TagMode.StartTagAndEndTag;

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

答案 1 :(得分:0)

正确的语法是:

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

应将其应用于taghelper class ,而不是Process方法。您可能已经这样做了,但是您的问题尚不清楚。我相信您仍然必须使用自闭标签语法(/>)才能起作用。