2009-06-16 1 views
2

Ich möchte einen Weg für einen Controller, der die normalen CRUD-Operationen hat einzurichten, aber die Details der Aktion nicht zeigen ‚Details‘ in der URL möchten. Stackoverflow scheint diese Art von Routing konfiguriert haben:Wie ‚Details‘ in MVC URL-Routing, zu entfernen, aber andere Aktionen intakt lassen?

http://stackoverflow.com/questions/999999/ 
http://stackoverflow.com/questions/ask 

Mit dieser Analogie, meine Routen zur Zeit wie folgt aussehen:

http://stackoverflow.com/questions/Details/999999/ 

Durch das Hinzufügen der folgenden Weg ich in der Lage war Details entfernt zu bekommen:

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" }); 

Wenn Sie jedoch andere Aktionen auf dem Controller ausführen (z. B. /questions/new für dieses Beispiel), beschweren Sie sich, dass die ID nicht analysiert werden kann.

Gibt es eine Möglichkeit, die Routen einzurichten, so dass ich nicht manuell alle anderen Aktionen (MapRoute "Elemente/erstellen", "Elemente/löschen" usw.) manuell in die Global.asax eingeben muss .cs? Ich würde im Wesentlichen wie eine zweite Strecke haben wie:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" }); 

... und habe die Verwendung Route Q1 Routing-Engine, wenn {id} eine ganze Zahl übereinstimmt, und {action} wenn es eine Zeichenfolge ist. Ist das möglich?

Antwort

6

Wenn Sie eine Route Beschränkung auf die erste gelegt, so dass die ID-Feld nur eine ganze Zahl sein kann, dann glaube ich, alle anderen Aktionen auf den Standard durch fallen.

routes.MapRoute("Q1", 
    "questions/{id}", 
    new {controller = "Questions", action = "Details"}, 
    new { [email protected]"\d+" }); 

Alles andere sollte von der Standardroute behandelt werden. Also würde "questions/3553" diesen Punkt treffen, aber "questions/ask" würde nicht zusammenpassen. Wahrscheinlich möchten Sie die spezifischere Route zuerst in Ihre Datei "Global.asax.cs" einfügen. Diese

+0

funktionierte perfekt. Beachten Sie jedoch, dass die Einschränkung als @ "\ d +" gelesen werden muss. – Jason

+0

Danke für die Aufklärung, die ich normalerweise eine Längenbegrenzung nach dem Ausdruck verwenden (d @ „\ d {2}“), so war ich nicht ganz sicher, was einfach zu setzen eine ganze Zahl hat. –

Verwandte Themen