首页 > 解决方案 > 在 TagHelper 中查找子元素

问题描述

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

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

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

在上面的示例中,LocaleKey 的 TagHelper 会将<h2>标记的内容更改为本地化字符串。如果这是一个没有参数的简单字符串,那么我可以简单地output.Content.SetHtmlContent()在 TagHelper 中使用来将h2's 的内容设置为字符串。但是在这种情况下,本地化字符串有一个参数 ( %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>它也是本地化的并且有它自己的参数),但是对于这个问题的范围,如果我可以让它在没有递归的情况下工作,我会很高兴。

标签: asp.net-coreasp.net-core-tag-helpers

解决方案


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


推荐阅读