Pregunta

Tengo la siguiente ruta, registrada en mi global.asax.

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);

kewl. cuando inicio el sitio, recoge correctamente esta ruta.

Ahora, cuando trato de hacer programáticamente lo siguiente, devuelve 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

¿Por qué estaría pasando esto?

¿Tenía la impresión de que encontraría la ruta de inicio pero agregaría algún valor que no se encontrara como elemento de cadena de consulta?

Actualizar

Todavía no hay suerte con esto. Además, usando el MVC RC , ahora necesito cambiar viewContext a veiwContext.RequestContext .. que se compila pero todavía obtengo un resultado nulo.

Actualización 2

Cuando tengo la ruta sin el elemento predeterminado page = 1 , la ruta SE ENCUENTRA . por ejemplo.

routes.MapRoute(
        "Home",
        "",
        new { controller = "Post", action = "Index", tags = string.Empty }
    );

.. y RouteTable.Routes.GetVirtualPath devuelve una instancia de VirtualPathData . Cuando agrego la page = 1 (valor predeterminado) de nuevo, la instancia de VirtualPathData devuelta es nula?

¿Fue útil?

Solución

Bueno, la razón por la que devuelve nulo es porque no hay una ruta con una " página " Datos de ruta.

¿Podría ampliar un poco lo que está tratando de lograr? Si desea redirigir a una página con la url / page / 2 o /? Page = 2, entonces debería usar RedirectToRoute o RedirectToAction:

return RedirectToRoute("IndexDefault", new {page = "2"}); 

Otros consejos

Creo que tu ruta debería ser así:

route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

o (dependiendo de cómo debe verse la URL completa) ...

route.MapRoute("theRoute", "/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

Esto aún coincidirá con una solicitud para http://mysite.com/ e irá a sus valores de ruta predeterminados definido anteriormente. Pero ahora, cuando especifique una etiqueta o página, obtendrá la URL que desea.

Deberías echar un vistazo a Phil's Route Tester:

Depurador de enrutamiento ASP.NET

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top