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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top