获取所有的孩子标签助手在父标签助手Asp.Net核心
问题描述:
我想写两个标签助手,用于本地化剃须刀视图中的字符串。父标签的目的是收集所有由子标签请求的密钥,并在一批中从数据库中获取并缓存它们。获取所有的孩子标签助手在父标签助手Asp.Net核心
然后子标签将使用缓存版本,这种方式我希望能够降低数据库的负载。我正在寻找这样的事情: <parent-tag> <child-tag key="Hello" /> some HTML here <child-tag key="Hi!" /> </parent-tag>
我希望能够获得父标记的Invoke方法中的对象列表。
编辑1: 我也曾尝试storing data in TagHelperContext to communicate with other tag helpers,但是这不会工作,因为我有打电话给output.GetChildContentAsync()
父的Invoke方法,它违背了缓存的整体目的内。
答
@ 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);
}
那么,有没有通过孩子穿越,或者你已尝试不同的东西出了问题? –
@FarrukhSubhani我唯一知道遍历孩子的方法是调用'output.GetChildContentAsync()',然后通过'content.GetContent()'获取内容,但是这种方法可以使用下面的方法:1.渲染(并因此调用)所有子标签助手,我不想要 2.你必须使用字符串操作,这对性能可能非常不利 – Encrypt0r
我需要在不调用output.GetChildContentAsync()的情况下获取子项列表。 – Encrypt0r