Frage

Ich möchte einen Weg für einen Controller einrichten, die die normalen CRUD-Operationen hat, möchte aber die Details der Aktion nicht zeigen ‚Details‘ in der URL. Stackoverflow scheint diese Art von Routing konfiguriert haben:

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 Strecke konnte ich Details bekommen entfernt:

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

Aber auch andere Aktionen auf dem Controller nach oben ziehen (z /questions/new für dieses Beispiel) beschwert sich, dass die ID nicht analysiert werden können.

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

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

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

War es hilfreich?

Lösung

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 durch auf den Standard fallen wird.

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

Alles andere sollte von der Standardroute behandelt werden. So „Fragen / 3553“ würden diese einen Hit, aber „Fragen / fragen“ nicht übereinstimmen. Sie wollen wahrscheinlich zuerst in Ihrer Datei Global.asax.cs die spezifischere Route setzen.

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