在父 Tag Helper Asp.Net Core 中获取所有子 Tag Helper

Getting all of the children Tag Helpers in a parent Tag Helper Asp.Net Core

我正在尝试编写两个用于本地化 razor 视图中的字符串的 Tag 助手。父标签的作用是收集子标签请求的所有键,并从数据库中批量获取并缓存。

然后子标签将使用缓存的版本,这样我希望降低数据库的负载。我正在寻找这样的东西:

<parent-tag>
   <child-tag key="Hello" /> 
     some HTML here
   <child-tag key="Hi!" /> 
</parent-tag>

我希望能够在 Parent 标记的 Invoke 方法中获取对象列表。

我也试过storing data in TagHelperContext to communicate with other tag helpers,但这也行不通,因为我必须在Parent的Invoke方法中调用output.GetChildContentAsync(),这违背了缓存的全部目的。

@Encrypt0r 您可以拥有 TagHelpers context.Items 和本地化密钥的内存中静态缓存关系。这将涉及在您中使用 context.Items 来执行 GetChildContentAsync 一次。所有后续时间都将通过查找基于 context.Items 的键值来缓存(假设键值不是动态的)。

这样想:

// Inside your TagHelper
if (_cache.TryGetValue(context.UniqueId, out var localizationKeys))
{
    ... You already have the keys, do whatever
}
else
{
    var myStatefulObject = new SomeStatefulObject();
    context.Items[typeof(SomeStatefulObject)] = myStatefulObject;
    await output.GetChildContentAsync();
    _cache[context.UniqueId] = new LocalizationKeyStuff(myStatefulObject);
}