2009-11-10 7 views
2

Je suis en train ici pour fusionner un peu 2 voies en 1 avec asp.net mvcasp.net mvc paramètre optionnel

Ces itinéraires sont:

http://www.example.com/e/1

et

http://www.example.com/e/1,name-of-the-stuff

Actuellement, il est défini comme cela dans les Global.asax.cs:

routes.MapRoute(
    "EventWithName", 
    "e/{id},{name}", 
    new { controller = "Event", action = "SingleEvent", id = "" }, 
    new { id = @"([\d]+)" } 
); 

routes.MapRoute(
    "SingleEvent", 
    "e/{id}", 
    new { controller = "Event", action = "SingleEvent", id = "" }, 
    new { id = @"([\d]+)" } 
); 

J'ai essayé de le manipuler en modifiant le 1er itinéraire comme celui-ci:

routes.MapRoute(
    "EventWithName", 
    "e/{id}{name}", 
    new { controller = "Event", action = "SingleEvent", id = "" }, 
    new { id = @"([\d]+)", name = @"^,(.*)" } 
); 

Il ne fonctionne pas Comme je dois séparer les 2 paramètres avec une barre oblique ou au moins un caractère.

Mon idée la plus possible pour résoudre ce problème serait d'utiliser la regex, car je n'ai besoin que de la partie id. Le nom est seulement descriptif et utilisé à des fins de référencement. Fondamentalement, y at-il un moyen d'utiliser une sorte de Regex du type de ([\d]+),(.*) et le id = "$1" ou quelque chose comme ça?

Répondre

3

Peut-être qu'il aide

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}/{*keywords}", 
    new { controller = "Home", action = "Index", id = 0 }, 
    new { id = "(\\d+)" } 
); 
+0

je besoin de formater mes URL comme ceci: http://www.example.com/Events/SingleEvent/1/name-of-the-stuff, ce qui est exactement ce que je cherche. – Erick

+2

Pas nécessairement. Le point clé de cette réponse est la partie {* keywords}. Essayez d'ajouter le '*' à votre itinéraire, avec la virgule. Si la partie ", foo" est optionnelle, essayez d'utiliser deux routes, d'abord avec les deux parties, ensuite avec juste {id}. – Brannon

+0

Brannon a raison. Je pense que le format '/ 1/what-is-new' est meilleur que'/1, what-is-new'. Comme vous pouvez le voir dans l'URL de requête StackOverflow. de toute façon, vous ne pouvez pas utiliser deux paramètres dans le même segment ou un texte littéral entre eux. –

Questions connexes