Создание и рендеринг бесконечного иерархического дерева категорий из таблицы ссылок на себя
У меня есть 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 ответ
Создайте класс модели представления, который является самоссылочным.
Заполните его в соответствующем классе модели (или, возможно, в вашем DataContext
частичный класс) используя запрос, который вы выполняете в представлении.
Оберните метод, выполняющий запрос, в метод, который проверяет и сохраняет результат в Cache
,
Убедитесь, что вы отменяете кэш при внесении изменений в дерево категорий.
Если запрос выполняет много запросов (по одному на уровень дерева), рассмотрите возможность получения содержимого таблицы категорий в виде плоского списка, а затем используйте linq для объектов, чтобы спроецировать его в класс модели представления.