Question

Sur un site ASP.NET MVC (version bêta) que je développe, les appels à ActionLink me renvoient parfois des URL contenant des chaînes de requête. J'ai isolé les circonstances qui produisent ce comportement, mais je ne comprends toujours pas pourquoi, au lieu de produire une URL propre, il décide d'utiliser un paramètre de chaîne de requête. Je sais que leur fonctionnement est identique, mais pour la cohérence (et l'apparence) des URL, ce n'est pas ce que je veux.

Voici mes itinéraires:

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

À présent, le problème ne se produit que lorsque je regarde la vue décrite par la route intitulée "Photos marquées". et exécutez ActionLink via:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

Qui produit l'URL:

http://domain/group/GROUPNAME?sortBy=

À partir de n'importe quel autre affichage, l'URL produite est la suivante:

http://domain/group/GROUPNAME

J'ai retiré le débogueur de routage ASP.NET de Phil , et tout semble en ordre. Celui-ci m'a laissé tomber. Des idées?

Était-ce utile?

La solution

Vous ne savez pas pourquoi différentes vues produisent différentes URL.

Mais vous pouvez vous débarrasser de ce paramètre sortBy en attribuant une valeur par défaut à la première route.

new {sortBy = " " }

Lors de la génération, si sortBy correspond à la valeur par défaut, le moteur de routage ignorera ce paramètre (s'il est dans la chaîne de requête).

Autres conseils

Vous devrez utiliser des itinéraires nommés ici, et non des itinéraires d'action, en raison du fonctionnement de l'acheminement dans ASP.NET, car il "correspond tout d'abord", pas "correspond le mieux".

Je pense que cela commence votre première route. Il a aussi l'action Tous. Et comme le sortby n'est pas spécifié, il l'expose comme paramètre de chaîne de requête

Cela fonctionnera toujours avec la méthode d'action "Tout" sur PhotosController, car elle ne remplit que le paramètre sortby avec la valeur de la chaîne de requête.

Dans le débogueur d'itinéraire, exécute-t-il le troisième ou le premier itinéraire?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top