2017-09-26 6 views
1

J'ai plutôt une carte de routage simple.Url.Action() ne supprime pas les valeurs par défaut

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

Maintenant, si l'utilisation Url.Action("Index", "Home"), il ne supprime pas correctement valeurs par défaut de la route. Et ça me donne /Home/Index. Maintenant, si je supprime {id} ou {seoName} et sa valeur par défaut correspondante, l'URL est correctement générée comme / (racine).

Qu'est-ce qui me manque ici? Cela ne semble pas être une valeur ambiante, puisque je visite la page principale sans ID, ni seoNames.

Des idées?

+2

Seul le dernier paramètre peut être marqué 'UrlParameter.Optional' –

+0

@StephenMuecke ne savais pas que, intéressant. Veuillez répondre à la question pour l'accepter. –

+1

Nkosi en a déjà ajouté :) –

Répondre

2

Vous aurez besoin de plusieurs mappages pour obtenir ce que vous voulez, car vous n'êtes autorisé qu'à rendre le dernier espace réservé de routage facultatif.

routes.MapRoute(
    name: "SeoFriendly", 
    url: "{controller}/{action}/{id}/{seoName}", 
    defaults: new { controller = "Home", action = "Index", seoName = UrlParameter.Optional } 
); 

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