ASP.Net MVC mit komplexen Routen - wie es "gesund" zu halten?

8

Ich habe einen Kunden, der eine URL-Namenskonvention nach folgendem Muster verwenden möchte:

%Vor%

Was gut ist - das funktioniert hervorragend, mit einem Controller pro Themenbereich, und die Aktion nach der ID (Betreff) ist überhaupt kein Problem.

Allerdings wird es dann kompliziert, da der Client die Hierarchie dann weiter fortsetzen möchte:

%Vor%

Ich habe einen Controller für das eng verwandte Thema (es ist nur ein weiterer Themenbereich), der die gesamte Admin-Seite behandelt, aber der Client besteht darauf, dass die öffentliche Ansicht von dem übergeordneten Thema abhängt und nicht von seiner eigenen Wurzel.

Wie kann ich dies tun und dabei vermeiden, die MVC-Prinzipien zu durchbrechen und auch eine Menge von ASP.Net MVC zu vermeiden, die Funktionalität in meinem Themenbereich-Controller bietet, nur um die verwandten Themen von demselben Controller zu behandeln ?

Ist es möglich, die verwandten Themen Controller aus dem übergeordneten Subject Controller zu rufen und die resultierende Ansicht zurückzugeben (da dies die Funktionstrennung für die Subjekte auf ihre eigenen Controller halten würde)? Wenn das möglich ist, würde es eine Menge Probleme damit lösen.

    
Moo 04.03.2012, 16:51
quelle

2 Antworten

2

Hier ist die Lösung, die mein gegebenes Problem löst - hoffe, dass es jemand anderen löst.

Wie in meinem Kommentar zu Robert Harvey erwähnt, ist alles, was ich brauche, eine andere Route, die nicht die ersten zwei oder drei Komponenten als Controller, Action und ID verwendet, sondern diese Werte von später übernimmt - wenn Sie hängen Dies auch von einem statischen Wert in der Route, es ist viel einfacher zu tun.

Also, hier ist die URL, die ich gewählt habe, um die Route zu vereinfachen:

%Vor%

Die Route, die diese URL erfüllt, lautet wie folgt:

%Vor%

Bei der folgenden Controller-Aktion kann ich nach Parameterwerten für parentcontroller und eltersubject fragen, damit ich das zugehörige Element herausfiltern kann, um nur für das gegebene Elternobjekt spezifisch zu sein - Problem gelöst!

Diese Route muss über denen liegen, die nur die ersten beiden Werte betreffen, andernfalls besteht die Gefahr, dass eine andere Routenkarte die Anfrage übernimmt.

Ich könnte das ganz ohne den / related / static-Teil machen, da die Route einfach auf die Anzahl der Werte passen würde, und in der Tat kann ich das tatsächlich tun - jedoch halte ich es für die spätere Verwaltung für besser, wenn es ein statisches Element gibt dort um die Benutzung der Route zu bestätigen.

Ich hoffe, das hilft jemandem!

    
Moo 04.03.2012, 18:30
quelle
1

Eine Möglichkeit besteht darin, eine Platzhalterroute anzugeben (beachten Sie das Sternchen):

%Vor%

Damit kann der Controller die gesamte Pfadzeichenfolge nach dem action erhalten.

Sie können dann die Hierarchie der Themen in der Controller-Methode wie folgt erhalten:

%Vor%

Sobald Sie das haben, können Sie alles tun, was Sie wollen, einschließlich des Versands verschiedener Themen an verschiedene Bearbeitungsmethoden für die Verarbeitung.

    
Robert Harvey 04.03.2012 17:29
quelle