2011-12-01 66 views
0

我有一個4級深層節點結構,其中最高級別由1個根節點組成。有效的方法來獲得節點X級深

我想要做的就是讓所有節點都在4級針對某個屬性(IES)是真實的,例如:

得到所有4級節點,其中nodePropertyX ==真。

現在,我可以用for-each循環來做到這一點,並迭代上面的級別中的所有項目,但我感覺它會效率低下。

  1. 如何以更高效的方式做到這一點?有沒有辦法可能緩存我的數據集? (我將結果作爲數據表返回)?

  2. 什麼是最佳方法:使用C#控件(.ascx)或剃鬚刀腳本(.cshtml)?

回答

0

根據您想與這些節點做什麼,你可以使用剃刀和內置緩存的宏能力緩存宏觀的輸出:

以下是如何獲得的所有節點在離根節點4級有一個屬性nodePropertyX相當於

@foreach (var item in @Model.AncestorOrSelf().Descendants() 
    .Where("Visible") 
    .Where("level=4") 
    .Where("nodePropertyX == \"value\"")) 
{ 
    <a href="@item.Url">@item.Name</a> 
} 

將此代碼放在一個腳本文件(第開發,節點腳本文件),使用該腳本文件,創建一個宏,然後將宏的地方(在任何模板)要顯示列表的那些節點。

爲了緩存宏的輸出,選擇宏,並設置適當的屬性(緩存時段緩存按頁緩存個性)。

+0

是否會掃描整個內容樹(儘管緩存)?你可以編寫自己的遞歸方法,它不會掃描到4級以下 – Myster

相關問題