获取父标记帮助程序中的所有子标记帮助程序 Asp.Net 核心



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

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

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

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

我还尝试在 TagHelperContext 中存储数据以与其他标记帮助程序进行通信,但这也不起作用,因为我必须在父项的 Invoke 方法中调用output.GetChildContentAsync(),这违背了缓存的全部目的。

@Encrypt0r您可以拥有 TagHelpers 上下文的内存中静态缓存关系。项目和本地化的键。这将涉及使用上下文。要执行GetChildContentAsync一次的项目。然后,所有后续时间将通过基于上下文查找键值来缓存。项(假设键值不是动态的(。

可以这样想:

// 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);
}

相关内容

最新更新