Frage

Ich versuche herauszufinden, wie ich mit dem folgenden Szenario umgehen kann. Im Allgemeinen habe ich eine Reihe von Datensätzen in einer Tabelle. All dies haben ID- und Parentid -Felder, um einen Baum zu bilden.

Page1
 - Page2
 - Page3
Page4
 - Page5
 -- Page6

Jetzt möchte ich, dass meine Routen für Seite3 und Seite 6 so sind /Page1/Page6 und /Page3/Page5/Page6 vielversprechend. Das heißt, ich möchte alle Eltern in die URL einbeziehen.

Wie setze ich meine Controller -Aktion/-routing ein, um das obige Ergebnis zu erzielen?

Bearbeiten: Vergessen zu erwähnen, dass die obige Struktur dynamisch ist - Knoten können hinzugefügt/gelöscht/übergeordnet sind, usw.

War es hilfreich?

Lösung

Sie könnten ein Wildcard -Match verwenden.

Eine mögliche Route:

routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" });

Und in der Aktion die String -Seite akzeptieren und manuell analysieren, vielleicht mit einer Trennung?

Dies kann auch nützlich sein: URL -Routing

Andere Tipps

Beachten Sie, dass der Namen und die Aktion des Controllers festgelegt sind und nicht auf der URL basieren.

// place the more specific route first
routes.MapRoute("r1", "{parent}/{child}/{subchild}", 
    new { controller = "Page", action = "Index", parent = parent, child = child, subchild = subchild });

routes.MapRoute("r2", "{parent}/{child}", 
    new { controller = "Page", action = "Index", parent = parent, child = child });


public class PageController
{
    public ActionResult Index(string parent, string child, string? subchild)
    {
        // stuff
    }
}

Du solltest benutzen

routes.MapRoute("Page6", "Page3/Page5/Page6", new { controller = "Page6", action = "Index" });

Oder vielleicht verwenden Sie regelmäßiges Ausdrucksrouting

http://blog.sb2.fr/post/2009/01/03/regular-expression-maproute-with-aspnet-mvc.aspx

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