在父 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);
}
我正在尝试编写两个用于本地化 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);
}