2009-07-06 6 views
2

Étant plutôt nouveau pour ASP.MVC, je suis à la recherche d'une solution au problème de routage suivant.Routage en fonction de la valeur d'action facultative dans l'URL

Je veux que ces URL pour mener les pages indiquées:

/membres/123/A + Etrange + Nom d'utilisateur -> avec les membres détails
/membres/123 -> comme ci-dessus
/membres/connexions/123 -> avec liste des connexions membres
/membres/connexions/123/A + Etrange + Nom d'utilisateur -> comme ci-dessus
/membres/comme nts/123 -> avec la liste des commentaires des membres
/membres/Commentaires/123/A + Etrange + Nom d'utilisateur -> comme ci-dessus

Le nom d'utilisateur doit être ignorée, mais sera ajouté aux liens pour aider moteurs de recherche.

J'ai essayé avec les routes suivantes:

routes.MapRoute("MemberPage", "Member/{id}/{*name}", new { controller = "Member", action = "Details", id = "" }); 
routes.MapRoute("MemberAction", "Member/{action}/{id}/{*name}", new { controller = "Member", action = "Details", id = "" }); 

Mais il semble que ce réglage par défaut de la première route, et obtient alors une erreur depuis « Connexions » ou « Commentaires » est id invalide pour le contrôleur Détails .

Existe-t-il un moyen de changer de route en fonction du type de la valeur d'ID, ou d'une autre façon de résoudre ce problème?

Répondre

5

Il peut être utile d'ajouter une contrainte de route aux {id} deux routes.

routes.MapRoute("MemberPage", "Member/{id}/{*name}", 
     new { controller = "Member", action = "Details", id = "" }, 
     new { [email protected]"\d+" }); 
routes.MapRoute("MemberAction", "Member/{action}/{id}/{*name}", 
     new { controller = "Member", action = "Details", id = "" }, 
     new { [email protected]"\d+" }); 

De cette façon, il ne tentera pas de carte « Commentaires » à {id} dans la première voie et tombera jusqu'à la deuxième qui devrait fonctionner correctement avec cette URL.

+0

Fonctionne comme le charme! Merci! – hbruce

+0

Merci pour la réponse –

Questions connexes