Создание и рендеринг бесконечного иерархического дерева категорий из таблицы ссылок на себя - PullRequest
1 голос
/ 13 апреля 2010

У меня есть таблица Categories, в которой в каждой категории есть ParentId, которая может ссылаться на CategoryId любой другой категории, которую я хочу отобразить как многоуровневый список HTML, например:

<ul class="tree">
    <li>Parent Category
        <ul>
            <li>1st Child Category
                <!-- more sub-categories -->
            </li>
            <li>2nd Child Category
                <!-- more sub-categories -->
            </li>
        </ul>
    </li>
</ul>

В настоящее время я рекурсивно отрисовываю частичное представление и перехожу к следующей категории. Это прекрасно работает, но это неправильно, потому что я выполняю запросы в представлении.

Как можно преобразовать список в древовидный объект и кэшировать его для быстрого отображения каждый раз, когда мне нужен список всех иерархических категорий?

1 Ответ

1 голос
/ 13 апреля 2010

Создание класса модели представления, который является самоссылочным.

Заполните его в соответствующем классе модели (или, возможно, в вашем DataContext частичном классе), используя запрос, который вы выполняете в представлении.

Оберните метод, выполняющий запрос, в метод, который проверяет и сохраняет результат в Cache.

Убедитесь, что вы отменяете кэш при внесении изменений в дерево категорий.

Если запрос выполняет много запросов (по одному на уровень дерева), рассмотрите возможность получения содержимого таблицы категорий в виде плоского списка, а затем используйте linq для объектов, чтобы спроецировать его в класс модели представления.

...