我写了一个标签助手,可以按如下方式使用...
<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 />
任何人都能解释我需要做什么?
答案 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
方法。您可能已经这样做了,但是您的问题尚不清楚。我相信您仍然必须使用自闭标签语法(/>
)才能起作用。