Frage

Ich habe - ich glaube - eine komplexe URL mit in ASP MVC zu behandeln 1.0: Alle meine Handlungen in den meisten der Controller benötigen zwei Parameter die ganze Zeit: Account und Project. Dies ist oben auf die Anforderungen jeder Aktion. Dies bedeutet eine typische URL ist wie folgt:

http://abcd.com/myaccount/projects/project_id/sites/edit/12

In diesem Beispiel: myaccount ist der Kontoname. Projekte kann eine Steuerung sein, andere Optionen sind wie Orte , Mitarbeiter . project_id ist die ID eines Projekts innerhalb von myaccount , Sites könnte ein Controller sein, andere Optionen sind wie Personal oder Zahlungen . Bearbeiten ist eine Aktion und 12 ist die ID der Website bearbeitet. (Hoffe, das ist klar genug)

Jetzt ist eine Option, um eine Route zu erstellen und übergeben project_id und Konto in alle Aktionen von Controllern, indem zwei zusätzliche Parameter für alle Aktionen. Dies ist nicht wirklich gewünscht und auch ich bin nicht sicher, dass die beiden Controller (Projekte und Sites) werden hier arbeiten.

Meine ideale Situation ist eine Art von Kontext zu verwenden, das die Controller-Aktion und speichern project_id und myaccount dort mit dem Anruf bewegt. Der Rest der Parameter kann dann mit in einer normalen Art und Weise behandelt werden wie:

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

Alle Ideen, wie / wo dies geschehen kann? Auch, wie wird dies mit Action arbeiten (das heißt korrekte Verbindungen basierend auf diesem Zusammenhang zu erzeugen)?

Danke!

War es hilfreich?

Lösung

Sie müssen zuerst die Token auf Ihre Routen wie {company}/projects/{project}{controller}/{action}/{id} hinzuzufügen. Dann, wenn Sie Ihre eigene IControllerFactory schreiben dann wäre es sehr einfach, die Werte aus der Routedata in die Steuerung über den Konstruktor zu schieben oder aber man wollte es tun. Die wahrscheinlich einfachste Weg, um loszulegen wäre DefaultControllerFactory Unterklasse und die CreateController Methode außer Kraft setzen.

Andere Tipps

Das nicht ganz Sinn für mich. Warum würden Sie eine Route, die ähnlich der folgenden ist:

{controller}/{id}/{controller}/{id}

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