2010-11-21 11 views
0

J'ai deux routes.asp problème de routage mvc

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+" }); 

Je possède ce contrôleur

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

Pourquoi cette URL va à la première route/Mon/Tous/p5

que quelqu'un peut me pointer vers un bon tutoriel sur les itinéraires?

Répondre

3

Les routes doivent être enregistrées dans le bon ordre, car elles sont traitées dans le même ordre que celui dans lequel elles sont enregistrées. Votre premier itinéraire est essentiellement un crochet tous, donc il sera également correspondre /My/All/p5. Inscrivez-vous cette route d'abord:

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

Lecture: Steven Sanderson a une très bonne explication de routage dans son livre (Pro MVC 2) au chapitre 8. (You can find it here)

Extrait du livre:

S'il y a une règle d'or de routage, c'est: mettre des entrées plus spécifiques avant les moins spécifiques. Oui, RouteCollection est une liste ordonnée , et l'ordre dans lequel vous ajoutez entrées de route est critique pour le processus de routage .

+0

Pourriez-vous aider la question posée en paraphrasant l'explication? –

+0

que voulez-vous dire? il a demandé un bon tutoriel, j'ai indiqué un bon endroit pour en apprendre davantage sur le routage. –

1

J'ai une série de messages de blog sur le routage, vous pouvez lire ici: http://haacked.com/tags/Routing/default.aspx

En outre, le débogueur de route http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx est un outil utile pour jouer avec routage et comprendre pourquoi un itinéraire que vous pensez doit correspondre est ne correspond pas.

Par ailleurs, Matthew Abbot a raison. Vous devez ré-ordonner les itinéraires. La citation de Nazar du livre de Steven Sanderson a la raison pour laquelle c'est le cas. Le routage évalue les routes dans l'ordre et le premier gagne.

Voici l'exercice simple que j'aurais fait pour déboguer cette situation. En regardant votre demande:

/Mon/Tous/p5

Je passerais par chaque route un à la fois dans mon système et demander, « serait-il correspondre? ». La première route où la réponse est oui est celle qui correspondra. Dans votre exemple, vous pouvez voir que la route est la première route. C'est pourquoi Steven suggère de mettre en premier des itinéraires plus spécifiques, de sorte qu'ils correspondent.

Et le débogueur de route que j'ai mentionné plus tôt fait cet exercice pour vous. Il vous montre chaque route qui correspond à une demande donnée.