ASP.NET MVC 4 erzeugt eine Baumansicht mit rekursiver Teilansicht

8

Ich habe eine Teilansicht in einem MVC 4-Projekt, das stark typisiert ist. Es benötigt eine IEnumerable-Auflistung einer Tabelle einer Datenbank. In dieser Tabelle gibt es IDs, Namen und ParentIDs zum Speichern einer hierarchischen Verbindung zwischen Datensätzen. Die Ansicht, die die partielle Ansicht aufruft, wird ebenfalls stark typisiert. Sie verwendet die gesamte Datenbank als Modell und übergibt die Categories-Tabelle als aufzählbare Auflistung an die partielle Ansicht:

%Vor%

Und in der Teilansicht möchte ich zuerst die Wurzelknoten nehmen, damit ich den gesamten Baum rekursiv erweitern kann. In der Datenbanktabelle werden alle Datensätze als Root-Knoten mit ParentID == null betrachtet.
Im Allgemeinen würde mein Weg so aussehen:

%Vor%

Ich überprüfe also, ob die Parent-ID des ersten Elements des Modells null ist, und wenn dies der Fall ist, sollte es ein & lt; ul & gt; Tag mit der ID "Navigation", so dass das jquery-Plugin erkennen kann, dass es sich um ein TreeView-Steuerelement handelt. Dann erstellt es ein List-Tag mit einem rekursiven Aufruf innerhalb. Die rekursiv aufgerufene Teilansicht übernimmt die untergeordneten Elemente des Knotens als Modell. Und schließlich, wenn wir am Ende des Renderings der Teilansicht angekommen sind und wir uns auf der "root level" befinden, sollte es ein schließendes & lt; ul & gt; Tag
Es gibt jedoch einige Probleme. Am Ende ist das abschließende ungeordnete Listen-Tag falsch, VS kann das passende Start-Tag dafür nicht finden. Zweitens weiß ich nicht warum, aber ganz oben kann ich den Starter & lt; ul & gt; Tag zwischen den Tags taggen, und ich kann es nicht bei dem schließenden Tag unten tun. Aber ich bin nicht sicher über diese & lt; ul & gt; Tags auch, ich fühle, dass auch diese falsch sind.

Bitte, hilf mir, ich stecke jetzt seit Tagen fest.

    
user2082422 09.07.2013, 16:18
quelle

2 Antworten

15

Mann, Sie haben hier etwas Wonk. Ich fühle deine Schmerzen beim stecken bleiben.

sehen Sie, ob das Ihr Boot schwimmt.

Sie benötigen einen Startwert, um zu verfolgen, wonach Sie in der Liste suchen, wenn Sie eine Rekursion in derselben Liste durchführen. Es ist besser, ein Eltern-Kind-Mapping in der Klasse zu machen, aber meh hat Spaß gemacht, wenn man seine Struktur berücksichtigt und sollte es tun.

Modelle

%Vor%

Controller (HINWEIS: Sie starten die Rekursionskette, indem Sie die Seed-Eigenschaft auf null setzen, die alle Nulleltern aufnimmt)

%Vor%

Ansichten Index

%Vor%

Teilweise (Ihre _TreeCategories. HINWEIS: Setzen Sie den Startwert auf die aktuelle Knoten-ID und die volia-Rekursion)

%Vor%     
hubson bropa 09.07.2013, 17:53
quelle
1

Sie können Shield UIs rekursives TreeView für ASP.NET MVC ausprobieren.

Damit können Sie alle TreeView-Elemente mit einem RecursiveDataSource-Objekt angeben, das eingerichtet werden kann, um die Daten für ein Baumelement von einem Remote-Endpunkt oder einer lokalen Quelle "träge" abzurufen, wenn das Element erweitert wird.

Die RecursiveDataSource ist ein Wrapper um ein JavaScript-DS-Widget, der JS-Code benötigt und den Servercode aktualisiert, der die Daten bereitstellt (entweder einen Web-Service implementiert oder die Daten in eine JS-Variable legt) Ihrer Meinung nach).

    
Vladimir Georgiev 11.08.2016 11:24
quelle