Создание и рендеринг бесконечного иерархического дерева категорий из таблицы ссылок на себя

У меня есть 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 для объектов, чтобы спроецировать его в класс модели представления.

Другие вопросы по тегам