2010-01-28 11 views
2

J'ai deux (jusqu'à présent) différents types de routes dans mon application ASP.NET MVC, on est: {contrôleur}/{action}/{id} et l'autre {contrôleur}/{action}/{title}Deux types d'itinéraires différents génériques

Actuellement je dois définir les routes comme celle-ci:

 routes.MapRoute (
      "Default_Title_Slug",          // Route name 
      "product/details/{title}",       // URL with parameters 
      new { controller = "product", action = "details", title = "" }  // Parameter defaults 
     ); 

     routes.MapRoute (
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "site", action = "index", id = "" } // Parameter defaults 
     ); 

Notez que le premier que j'ai eu pour attacher au contrôleur produit, cela semble être la seulement comment je peux le faire fonctionner ... sinon les autres routes finissent par ressembler à ceci:

/controller/action?id=number 

Maintenant, je dois ajouter un autre appel MapRoute ciblant un autre contrôleur avec le segment {title} ... Je ne veux pas créer un nouvel itinéraire pour chaque entrée spécifique que je viens avec dans le futur ... y at-il un générique route que je peux créer pour mapper le/controller/action/title qui jouera bien avec la route/controller/action/id?

Merci,
Kieron

+0

S'il vous plaît cesser de rouler en arrière des changements qui ajoutent les bonnes balises – skaffman

+0

Il est déjà signalée sous asp.net, en fait, le routage est spécifique à asp.net. Arrêtez d'ajouter des tags inutiles. – Kieron

+1

re les étiquettes; le routage est plus large que MVC (il peut aussi être utilisé avec des webforms), et peu de gens vont regarder une telle étiquette granalur - ça vaut la peine d'avoir les deux. –

Répondre

4

Vous pouvez le faire avec une route-contrainte, comme regex - un très exemple similaire est here. Quelque chose comme:

routes.MapRoute (
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "site", action = "index", id = "" }, 
    new { id = @"\d+" } 
); 
routes.MapRoute (
    "Default_Title_Slug", 
    "{controller}/{action}/{title}", 
    new { controller = "product", action = "details", title = "" } 
); 
+0

Parfait, merci! – Kieron

+0

Et juste pour être clair, le Default_Title_Slug peut maintenant avoir son URL changé en {contrôleur}/{action}/id aussi – Kieron

+0

@Kieron - acclamations - copier/coller bug ;-p corrigé. –

Questions connexes