2008-11-25 8 views
4

Si vous avez un itinéraire:RouteValueDictionary supplantée par le contexte

routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _ 
    New With {.filter1 = "", .filter2 = "", .filter3 = ""}) 

alors dans une vue satisfaite par le motif de la route avec une url de /member/search/dev/phil/hoy, lorsque vous essayez de créer une autre URL de la route avec seulement filter1 présente à savoir

<%=Url.RouteUrl(New RouteValueDictionary(
    New With {.controller="member",.action="search", .filter1="dev"}))%> 

le résultat est l'itinéraire actuel /member/search/dev/phil/hoy, pas l'itinéraire prévu garni /member/search/dev

J'ai réussi à contourner le problème en utilisant la méthode RouteTable.Routes.GetVirtualPath directement, mais quelqu'un sait-il pourquoi cela fonctionne de cette façon ou est-ce peut-être un bug?

Répondre

0

Pourriez-vous essayer ceci et voir si cela fonctionne.

Placez ce,

routes.MapRoute("search", "{controller}/{action}/{filter1}/", _ 
    New With {.controller="member",.action="search", .filter1="dev"}) 

..before,

routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _ 
    New With {.filter1 = "", .filter2 = "", .filter3 = ""}) 

spécifique au générique.

0

C dans MVC ne représente pas complexe ...

Je crois que vous ne devriez pas utiliser les URL Routes pour atteindre ce type de fonctionnalité - vous êtes beaucoup mieux passer ce genre de données POST ou GET (Je préfère l'ancien ses tas plus ordonné) au CONTRÔLEUR et ensuite trier la logique d'affaires à partir de là.

Combien de temps cela prendra-t-il avant que vos cartes de route deviennent complètement lourdes avec de nombreuses combinaisons de recherche différentes?

Questions connexes