Bauen und machen unendlichen hierarchischen Kategoriebaum von selbstbezogenen Kategorietabelle
-
26-09-2019 - |
Frage
Ich habe eine Categories
Tabelle, in der jede Kategorie ein ParentId
hat, die zu einer anderen Kategorie des CategoryId
beziehen kann, dass ich angezeigt werden soll als Multi-Level-HTML-Liste, etwa so:
<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>
Zur Zeit bin ich Rendering rekursiv eine Teilansicht und das Bestehen der nächste Kategorie nach unten. Es funktioniert großartig, aber es ist falsch, weil ich Anfragen in einer Ansicht bin ausgeführt wird.
Wie kann ich die Liste in einen Baum Objekt und Cache für schnelle Anzeige machen jedes Mal, ich brauche eine Liste aller hierarchischen Kategorien?
Lösung
Erstellen Sie eine Ansicht Modellklasse, die selbst verweis ist.
Populate es in der entsprechenden Modellklasse (oder vielleicht in Ihrer DataContext
partielle Klasse) mit der Abfrage, die Sie in der Ansicht ausgeführt werden.
Wickeln Sie die Methode, die die Abfrage in einer Methode führt, dass die Kontrollen und speichert das Ergebnis in Cache
.
Stellen Sie sicher, dass Sie den Cache ungültig, wenn Änderungen an den Kategoriebaum vorgenommen werden.
Wenn die Abfrage ausgeführt wird viele Anfragen (einer pro Baumebene), dann erwägen, den Inhalt der Kategorietabelle als eine flache Liste und dann Linq zu Objekten mit in Ihre Ansicht Modellklasse zu projizieren.