Эффективный способ получить узлы X уровня глубоко - PullRequest
0 голосов
/ 01 декабря 2011

У меня 4-уровневая структура узлов, где самый верхний уровень состоит из 1 корневого узла.

Что я хочу сделать, это получить все узлы 4-го уровня, для которых определенное свойство (свойства) является истинным, например:

получить все узлы 4-го уровня, где nodePropertyX == true.

Теперь я мог бы сделать это с циклом for-each и повторить все элементы на уровнях выше, но у меня есть ощущение, что это будет неэффективно.

  1. Как я могу сделать это лучше и эффективнее? Есть ли способ кешировать мой набор данных? (Я возвращаю результаты в виде данных)?

  2. Какой метод предпочтительнее: использовать C # control (.ascx) или бритвенный скрипт (.cshtml)?

1 Ответ

0 голосов
/ 02 декабря 2011

В зависимости от того, что вы хотите сделать с этими узлами, вы можете использовать бритва , макросы и встроенные возможности кэширования для макросов, чтобы кэшировать выходные данныеmacro :

Вот как получить все узлы 4-го уровня от корневого узла, имеющего свойство nodePropertyX , равное значению :

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

Поместите этот код в файл сценариев (Раздел Разработчик , узел Файлы сценариев ), создайте макрос, используя этот файл сценариев, и вставьте макросгде бы (на любом шаблоне) вы хотели отобразить список этих узлов.

Чтобы кэшировать выходные данные макроса , выберите макрос и установите соответствующие свойства (Период кэширования , Кэширование по странице и Персонализация кэша ).

...