У меня есть один TagHelper, который создает контекст в своем Init
методе:
public class TabContext
{
public bool HasExplicitActiveItem { get; set; }
public bool HasActiveItem { get; set; }
}
В дочерних Taghelper я пытаюсь установить HasExplicitActiveItem
, если этот taghelper имеет атрибут Html (bool IsActive
), установленный на true
:
public override void Init(TagHelperContext context)
{
//...
if (IsActive)
{
_tabContext.HasExplicitActiveItem = true;
}
}
Теперь, когда taghelpers инициализирован, а HasExplicitActiveItem
неверно, я хочу установить состояние IsActive
из первого дочернего taghelper:
public override void Process(TagHelperContext context, TagHelperOutput output)
{
//...
if (_tabContext.HasActiveItem)
{
IsActive = false;
}
else if (!_tabContext.HasExplicitActiveItem)
{
IsActive = true;
}
if (IsActive)
{
_tabContext.HasActiveItem = true;
}
//...
}
Однако это не работает, потому что каждый помощник дочернего тега инициализируется и обрабатывается до инициализации следующего помощника дочернего тега.
Для их вызова я использую await output.GetChildContentAsync()
из родительского тега-помощника.
Так можно ли сначала инициализировать всех (прямых) дочерних элементов, а затем обработать их? Если нет, есть ли способ предварительно сканировать свойства детей?
Сомневаюсь, у меня проблема XY, желаемая разметка такая:
<tab>
<tab-pane />
<tab-pane />
<tab-pane is-active="true" />
<tab-pane />
</tab>
Если is-active
не установлен, я хочу установить is-active
на первом tab-pane
.