Как сделать так, чтобы мои помощники тегов ASP.NET Core автоматически закрывались - PullRequest
0 голосов
/ 14 мая 2019

Я написал помощник по тегам, который я могу использовать следующим образом ...

<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 ]

1 голос
/ 24 мая 2019

TagStructure.WithoutEndTag может записать тег только с начальным тегом или самозакрывающимся, но результат будет <div > или <div/>.Самозакрывающиеся теги привязки не являются допустимым HTML, поэтому вы не захотите их создавать, но вы можете создать вспомогательный тег, который самозакрывающийся.Помощники по тегам устанавливают тип свойства TagMode после чтения тега.Добавьте нижеприведенную строку кода в метод процесса:

output.TagMode = TagMode.StartTagAndEndTag;

Найдите время, чтобы прочитать Помощник автора тегов в ASP.NET Core , который прекрасно это охватывает.

0 голосов
/ 14 мая 2019

Правильный синтаксис:

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

, который следует применять к тегуhelper class , а не к методу Process.Возможно, вы уже делаете это, но это не было ясно в вашем вопросе.Я полагаю, что вы все равно должны использовать синтаксис самозакрывающегося тега (/>) для его работы, однако.

...