2010-04-13 4 views
1

J'ai une table Categories dans laquelle chaque catégorie a un ParentId qui peut faire référence à toute autre catégorie CategoryId que je veux afficher comme liste HTML multi-niveau, comme :Construire et rendre l'arbre de la catégorie hiérarchique infinie de la table de catégorie auto-référentielle

<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> 

Actuellement, je rends de manière récursive une vue partielle et je passe la catégorie suivante. Cela fonctionne très bien, mais c'est faux parce que j'exécute des requêtes dans une vue.

Comment rendre la liste dans un objet arbre et la mettre en cache pour un affichage rapide chaque fois que j'ai besoin d'une liste de toutes les catégories hiérarchiques?

Répondre

1

Créez une classe de modèle de vue qui est auto-référentielle.

Remplissez-le dans la classe de modèle appropriée (ou peut-être dans votre classe partielle DataContext) en utilisant la requête que vous exécutez dans la vue.

Envelopper la méthode qui effectue la requête dans une méthode qui vérifie et stocke le résultat dans Cache.

Assurez-vous d'invalider le cache lorsque des modifications sont apportées à l'arborescence des catégories. Si la requête exécute beaucoup de requêtes (une par niveau d'arborescence), envisagez d'obtenir le contenu de la table de catégories sous forme de liste plate, puis d'utiliser linq pour les objets pour les projeter dans votre classe de modèle de vue.

Questions connexes