2010-04-13 4 views
1

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

Смежные вопросы