获取所有的孩子标签助手在父标签助手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方法,它违背了缓存的整体目的内。

+0

那么,有没有通过孩子穿越,或者你已尝试不同的东西出了问题? –

+0

@FarrukhSubhani我唯一知道遍历孩子的方法是调用'output.GetChildContentAsync()',然后通过'content.GetContent()'获取内容,但是这种方法可以使用下面的方法:1.渲染(并因此调用)所有子标签助手,我不想要 2.你必须使用字符串操作,这对性能可能非常不利 – Encrypt0r

+0

我需要在不调用output.GetChildContentAsync()的情况下获取子项列表。 – Encrypt0r

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