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?

È stato utile?

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:

Debugger di routing ASP.NET

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top