2011-04-17 36 views
7

He agregado un área a mi proyecto MVC 3. Parece que no puedo obtener enrutamiento trabajando con un escenario muy simple. Parece que siempre quiere resolver en el área. Aquí está mi configuración En el inicio:Áreas MVC: ruta no de área se resuelve en el área

AreaRegistration.RegisterAllAreas(); 
IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Browse", action = "Index", id = UrlParameter.Optional } 

Y

public class AdminAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get { return "Admin"; } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Users", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

En web.config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Login" defaultUrl="~/Browse" timeout="60" cookieless="UseDeviceProfile" /> 
</authentication> 

estoy usando RouteDebugger para tratar de resolverlo. Cuando navego a la página de conexión del depurador muestra:

  • AppRelativeCurrentExecutionFilePath: ~ Login
  • Admin/{controlador}/{acción}/{id} no coincide actual Solicitud
  • {controlador}/{acción}/{id} Partidos Solicitud actual
  • Matched Ruta: {controlador}/{acción}/{id}

Hasta ahora todo vaya sobredosis. Pero entonces se muestra esto:

  • URL generada:/admin/login ReturnUrl =% 2F usando la ruta "Admin/{controlador}/{acción}/{id}"

Siguiente I Entrar Mi método de Conexión/Índice no se ve afectado, y el depurador muestra:.

  • AppRelativeCurrentExecutionFilePath: ~ Login
  • admin/{controlador}/{acción}/{id} no coincide Solicitud actual
  • {controlador}/{acción}/{id} Partidos Solicitud actual
  • Matched Ruta: {controlador}/{acción}/{id}
  • URL generada:/admin/login ReturnUrl =% 2FAdmin% 2FLogin utilizando la ruta "admin/{controlador}/{acción}/{id}"

por un lado se dice que no coincide con la ruta de administración, a continuación, en la URL generada se dice que es usando esa ruta Estoy perplejo.

Respuesta

3

intenta agregar el parámetro de área con un valor predefinido a su definición de enrutamiento ... Por ejemplo en lugar de:

context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Users", action = "Index", id = UrlParameter.Optional } 
     ); 

uso:

context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { area = "Admin", controller = "Users", action = "Index", id = UrlParameter.Optional } 
     ); 

Avísame si ayuda .. Saludos

+0

Hice exactamente lo que dices. Primero intenté hacer el registro de área antes del registro de no área. No es bueno. Los enlaces al controlador que no sea de área siempre se resuelven con "Admin /" frente a ellos. Así que revertí la orden de registro.Luego, cuando navego hacia "~/Admin" obtengo "~/Home/NotFound" con el depurador mostrando una coincidencia en la ruta "{controller}/{action}/{id}". Cuando navego hasta "~/Admin/Users", obtengo "~/Admin/Home/Home/Home/NotFound" con el depurador mostrando coincidencia en la ruta {catchall}. –

+0

Cuando digo "Los enlaces a un controlador que no es de área siempre se resuelven con 'Admin /' frente a ellos" eso no es totalmente cierto. Html.ActionLink se resuelve correctamente. Pero Html.BeginForm y Html.BuildUrlFromExpression resuelven en el área de administración incluso cuando T es un controlador que NO está en un área. –

+0

Estaba usando la versión 2.0 de Microsoft.Web.Mvc, en la cual estos métodos no entienden las áreas. Está arreglado en 3.0. –

Cuestiones relacionadas