ASP.NET MVC non riesce a trovare il percorso a livello di codice
-
07-07-2019 - |
Domanda
Ho il seguente percorso, registrato nel mio global.asax.
routes.MapRoute(
"Home", // Unique name
"", // Root url
new { controller = "Home", action = "Index",
tag = string.Empty, page = 1 }
);
kewl. quando avvio il sito, riprende correttamente questo percorso.
Ora, quando provo a fare programmaticamente quanto segue, restituisce 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
Perché dovrebbe succedere?
Avevo l'impressione che avrebbe trovato il percorso Home ma aggiungere valori non trovati come elementi della stringa di query?
Aggiornamento
Ancora niente fortuna con questo. Inoltre, utilizzando MVC RC , ora devo cambiare viewContext in veiwContext.RequestContext .. che viene compilato ma sto ancora ottenendo un risultato nullo.
Aggiornamento 2
Quando ho il percorso senza la voce page = 1
predefinita, il percorso È TROVATO .
ad es.
routes.MapRoute(
"Home",
"",
new { controller = "Post", action = "Index", tags = string.Empty }
);
.. e RouteTable.Routes.GetVirtualPath
restituisce un'istanza VirtualPathData
. Quando aggiungo di nuovo page = 1
(valore predefinito), l'istanza VirtualPathData
restituita è nulla?
Soluzione
Bene, il motivo per cui restituisce null è perché non esiste un percorso con una "pagina" dati del percorso.
Potresti espandere un po 'quello che stai cercando di ottenere? Se desideri reindirizzare a una pagina con url / page / 2 o /? Page = 2, allora dovresti usare RedirectToRoute o RedirectToAction:
return RedirectToRoute("IndexDefault", new {page = "2"});
Altri suggerimenti
Penso che il tuo percorso dovrebbe essere così:
route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
new { controller="Post", action="Index", tag="", page=1 });
o (a seconda dell'aspetto dell'URL completo) ...
route.MapRoute("theRoute", "/{tag}/{page}",
new { controller="Post", action="Index", tag="", page=1 });
Ciò corrisponderà comunque a una richiesta http://mysite.com/ e passa ai valori di route predefiniti definito sopra. Ma ora quando specifichi un tag o una pagina, otterrai l'URL desiderato.
Dovresti dare un'occhiata a Phil's Route Tester: