2017-07-03 88 views
1

我想寫兩個標籤助手,用於本地化剃鬚刀視圖中的字符串。父標籤的目的是收集所有由子標籤請求的密鑰,並在一批中從數據庫中獲取並緩存它們。獲取所有的孩子標籤助手在父標籤助手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

回答

1

@ 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); 
} 
相關問題