在 TagHelper 中寻找子元素

Looking for child elements in a TagHelper

我正在编写一个自定义 TagHelper,它应该根据其所有者标签具有的子元素更改其行为。这将用于替换本地化字符串中的自定义 html 元素。

这是我正在尝试做的一个简单示例:

<h2 locale-key="Hello, %1!">
    <span class="bold" locale-parameter="1">@userName</span>
</h2>

在上面的示例中,LocaleKey 的 TagHelper 会将 <h2> 标签的内容更改为本地化字符串。如果这是一个没有参数的简单字符串,那么我只需在 TagHelper 中使用 output.Content.SetHtmlContent() 即可将 h2 的内容设置为字符串。但是在这种情况下,本地化字符串有一个参数 (%1),我希望在最终输出中替换相应的子元素 (<span parameter="1">)。所以最终渲染的 html 看起来像这样:

<h2>Hello, <span class="bold">Lázár Zsolt</span>!<h2/>

为此,我应该能够从 LocaleKey TagHelper 中看到 DOM 中的所有子元素,因此我可以生成正确的 HTML 代码。在 TagHelper 的 ProcessAsync 方法中,我可以访问 TagHelperContextTagHelperOutput,但在调试时我无法在这两个对象中找到任何关于子元素的信息。这有可能吗?

另一种方法是保留字符串原样,使用 %1 参数键,然后使用子 ParameterTagHelper 将其自身代入参数化字符串。为此,我必须从 TagHelper 中查看当前标签的兄弟姐妹。

递归也很有趣(例如 <span> 也是本地化的并且有自己的参数),但对于这个问题的范围,如果我能在没有递归的情况下让它工作,我会很高兴.

我又发布得太早了...TagHelperOutput 中有一个 GetChildContentAsync() 方法可以...异步获取子内容。