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 . Lorsque j'ajoute le page = 1 (valeur par défaut) dans l'instance, l'instance de VirtualPathData renvoyée est null?

Était-ce utile?

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:

débogueur de routage ASP.NET

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