ASP.NET MVC ne peut pas trouver la route par programme
-
07-07-2019 - |
Question
J'ai l'itinéraire suivant, enregistré dans mon fichier global.asax.
routes.MapRoute(
"Home", // Unique name
"", // Root url
new { controller = "Home", action = "Index",
tag = string.Empty, page = 1 }
);
kewl. lorsque je lance le site, il prend correctement cette route.
Désormais, lorsque j'essaie de procéder par programme, l'opération renvoie NULL.
var pageLinkValueDictionary =
new RouteValueDictionar(linkWithoutPageValuesDictionary)
{{"page", 2}};
VirtualPathData virtualPathData =
RouteTable.Routes.GetVirtualPath(viewContext, "Home"
pageLinkValueDictionary);
// NOTE: pageLinkValueDictionary ==
// Key: Action, Value: Index; Key: page, Value: 2
Pourquoi cela se produirait-il?
J'avais l'impression qu'il trouverait la route de destination mais ajouterait les valeurs non trouvées en tant qu'éléments de la chaîne de requête?
Mettre à jour
Toujours pas de chance avec ça. Vous pouvez également utiliser le MVC RC , je dois maintenant changer le viewContext en veiwContext.RequestContext .. qui compile mais je reçois toujours un résultat nul.
Mise à jour 2
Lorsque j'ai l'itinéraire sans l'élément par défaut page = 1
, l'itinéraire EST TROUVE .
par exemple.
routes.MapRoute(
"Home",
"",
new { controller = "Post", action = "Index", tags = string.Empty }
);
.. et RouteTable.Routes.GetVirtualPath
renvoie une instance VirtualPathData ??code>. Lorsque j'ajoute le
page = 1
(valeur par défaut) dans l'instance, l'instance de VirtualPathData ??code> renvoyée est null?
La solution
La raison pour laquelle il renvoie null est qu'il n'y a pas de route avec une "page". données de route.
Pourriez-vous développer un peu plus sur ce que vous essayez de réaliser? Si vous souhaitez rediriger vers une page avec l'URL / page / 2 ou /? Page = 2, vous devez utiliser RedirectToRoute ou RedirectToAction:
return RedirectToRoute("IndexDefault", new {page = "2"});
Autres conseils
Je pense que votre itinéraire devrait être comme ceci:
route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
new { controller="Post", action="Index", tag="", page=1 });
ou (selon l'apparence de l'URL complète) ...
route.MapRoute("theRoute", "/{tag}/{page}",
new { controller="Post", action="Index", tag="", page=1 });
Cela correspondra toujours à une demande à http://mysite.com/ et à vos valeurs de route par défaut. défini ci-dessus. Mais maintenant, lorsque vous spécifiez une balise ou une page, vous obtenez l'URL souhaitée.
Vous devriez vérifier le testeur de route de Phil: