2010-11-21 16 views
0

Ich habe diese zwei Routen.asp mvc routing problem

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

routes.MapRoute(
    "Paging", // Route name 
    "{controller}/{action}/p{currentPage}", 
    new { controller = "Home", action = "Index" }, 
    new { currentPage = "\\d+" }); 

Ich habe diesen Controller

public class MyController 
{ 
    public ActionResult All(int currentPage = 1) 
    { 
     // some code executed here 
     return View(pList); 
    } 
} 

Warum diese URL zum ersten Weg geht/My/All/p5

jemanden, der mir gutes Tutorial über Routen zeigen kann?

Antwort

3

Routen müssen in der richtigen Reihenfolge eingetragen werden, da sie in der gleichen Reihenfolge verarbeitet werden, in dem sie registriert sind. Ihre erste Route ist im Wesentlichen ein Fang, so dass es auch /My/All/p5 entspricht. Registrieren Sie diesen Weg zuerst:

routes.MapRoute( 
    "Paging", // Route name 
    "{controller}/{action}/p{currentPage}", 
    new { controller = "Home", action = "Index" }, 
    new { currentPage = "\\d+" }); 

routes.MapRoute( 
    "Default", // Route name 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
1

Reading: Steven Sanderson hat eine sehr gute Erklärung für das Routing in seinem Buch (Pro MVC 2) in Kapitel 8. (You can find it here)

Aus dem Buch:

Wenn es eine goldene Regel für das Routing gibt, das ist es: setzen Sie mehr spezifische Route Einträge vor weniger spezifische. Ja, Routecollection eine geordnete Liste und die Reihenfolge, in der Sie Routeneinträge hinzuzufügen, ist entscheidend für den routematching Prozess.

+0

Können Sie der Frage helfen, indem Sie die Erklärung paraphrasieren? –

+0

was meinst du? Er fragte nach einem guten Tutorial, ich habe auf einen guten Ort hingewiesen, um etwas über Routing zu lernen. –

1

Ich habe eine Reihe von Blog-Posts auf Routing können Sie hier lesen: http://haacked.com/tags/Routing/default.aspx

Auch die Route Debugger http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx ist ein nützliches Werkzeug für das Spiel mit Routing und zu verstehen, warum eine Route, die Sie denken, übereinstimmen sollten, ist nicht passend.

BTW, Matthew Abbot hat Recht. Sie müssen die Routen neu anordnen. Nazars Zitat aus Steven Sandersons Buch hat den Grund, warum das so ist. Das Routing wertet die Routen in der Reihenfolge aus und die erste gewinnt.

Hier ist die einfache Übung, die ich getan hätte, um diese Situation zu debuggen. Ein Blick auf Ihre Anfrage:

/My/All/p5

Ich würde man jede Strecke durchlaufen zu einer Zeit in meinem System und fragen: „würde es passen?“. Die erste Route, bei der die Antwort Ja ist, ist diejenige, die übereinstimmt. In Ihrem Beispiel sehen Sie, dass die Route die erste Route ist. Deshalb schlägt Steven vor, spezifischere Routen zu setzen, damit sie übereinstimmen.

und die Route Debugger ich bereits erwähnt, macht diese Übung für Sie. Es zeigt Ihnen jede Route, die einer bestimmten Anfrage entsprechen würde.