ASP.NET 5 Сложный TagHelper

Можно ли создать сложный помощник тегов в ASP.NET 5, где пользовательский тег имеет дочерние элементы/теги определенного типа?

<blockSection columns="2" labelPosition="left">
   <inputField for="name" />
   <inputField for="email" required="true"/>
</blockSection>

В приведенном выше примере blockSection будет TagHelper, который принимает только теги inputField.


person sam360    schedule 09.08.2015    source источник
comment
Конечно, проверьте, например, stackoverflow.com/q/31553298/1836935   -  person Daniel J.G.    schedule 09.08.2015
comment
@DanielJ.G. Я думаю, он имеет в виду принудительное соблюдение того, какие элементы могут существовать под тегом <blockSection>.   -  person N. Taylor Mullen    schedule 10.08.2015
comment
Вы правы, похоже, я не совсем понял вопрос :) Хорошая проблема.   -  person Daniel J.G.    schedule 10.08.2015
comment
Возможно, этот пост в блоге о сложных настраиваемых помощниках по тегам может дать вам некоторые подсказки davepaquette.com/archive/2015/12/28/   -  person Michael A. Volz aka Flynn    schedule 12.03.2016


Ответы (1)


Без целой кучи ухищрений (самостоятельный анализ тела тегов или создание TagHelper, которое нацелено на все) вы не сможете сделать это на 100% сегодня (beta6).

Вы можете частично решить проблему, обеспечив отображение элементов <inputField> только внутри тега <blockSection> (это не помешает вам помещать такие элементы, как <p>, внутрь тега <blockSection>). Этого можно добиться, используя пакет context.Items для уведомления InputFieldTagHelper о том, что он инкапсулирован (или нет) в <blockSection>. См. >эта проблема для получения информации о том, как общаться между дочерними => родительскими.

Если вы готовы дождаться завершения этой проблемы с Razor; вы сможете указать, какие теги могут отображаться внутри вашего файла TagHelper.

Другая похожая проблема SO для справки.

person N. Taylor Mullen    schedule 09.08.2015
comment
Спасибо за ответ. Это было бы крайне необходимо, есть идеи, когда это будет решено и будет доступно? - person sam360; 10.08.2015
comment
Это следующее в моем списке дел. Надеюсь бета7. В худшем случае бета8. :) - person N. Taylor Mullen; 10.08.2015
comment
Как мы можем защитить эти теги в будущем? скажем, W3C решает сделать blockSection официально поддерживаемым тегом HTML5.x или 6.x? Я думаю, что ‹asp:blockSection› был хорошим способом использовать пространство имен! Не уверен, почему команда MVC пошла по пути С#, теперь вернемся к тегам XML... - person sam360; 11.08.2015
comment
Вы всегда можете использовать @tagHelperPrefix "SomePrefix:", чтобы было понятно, где находятся TagHelpers. Это означает, что вы должны написать свой blockSection следующим образом: <SomePrefix:blockSection></SomePrefix:blockSection> - person N. Taylor Mullen; 11.08.2015
comment
Удивительно!! это делает именно то, что мне нужно. - person sam360; 12.08.2015