2012-05-17 8 views
6

Soy nuevo en ASP.NET MVC3.Ruta incorrecta que se recogió y ActionLink genera un hipervínculo incorrecto

He configurado algunas rutas en Global.asax, contra las cuales estoy generando algunos hipervínculos usando el método de ayuda @ Html.ActionLink.

Todos los enlaces están siendo correctamente prestados, excepto el superior en el código de abajo:

Global.asax

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}", 
    new { controller = "Base", action = "SubPage" } 
    ); 

routes.MapRoute(
    null, 
    "Section/{Page}", 
    new { controller ="Base", action="LandingPage"} 
    ); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}", // URL with parameters 
    new { controller = "Base", action = "Index" } // Parameter defaults 
    ); 

código ActionLink

@Html.ActionLink(@subPages.LinkedPageName, "DetailPage", 
    new { 
     Controller = "Base", 
     Page = @ViewBag.PageName, 
     SubPage = @Model.SubPageName, 
     DetailPageName = subPages.LinkedPageName 
    }) 

Lo anterior debe elegir la ruta superior, es decir:

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

¡Pero está eligiendo la ruta predeterminada!

+0

Noté que no hay 'acción' definida en su primera ruta. – Jacob

Respuesta

2

En esta definición de rutas:

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

Las siguientes condiciones se deben cumplir para que la ruta al partido:

  1. Si hay un parámetro controller pasado a ActionLink entonces su valor debe ser Base
  2. El parámetro Page debe especificarse y debe estar no vacío porque no tiene ningún valor predeterminado
  3. El parámetro SubPage se debe especificar y debe ser no vacía porque no tiene ningún valor predeterminado
  4. El parámetro DetailPageName se debe especificar y debe ser no vacía porque no tiene ningún valor predeterminado

Así que en este llamar a ActionLink:

@Html.ActionLink(@subPages.LinkedPageName, "DetailPage", 
    new { 
     Controller = "Base", 
     Page = @ViewBag.PageName, 
     SubPage = @Model.SubPageName, 
     DetailPageName = subPages.LinkedPageName 
    }) 

Condición # 1 es claramente satisfecho. Pero las condiciones n. ° 2, n. ° 3 y n. ° 4 podrían no estar satisfechas porque sus valores podrían ser nulos.

Y como dice que la ruta que termina haciendo coincidir es la ruta predeterminada, sospecho que el parámetro Page es nulo o está vacío. es decir, @ViewBag.PageName está devolviendo un valor nulo o vacío.

Ingrese su código (quizás en el depurador o imprímalo en la vista) para ver si la propiedad PageName tiene un valor.

Cuestiones relacionadas