2011-05-25 15 views
6

Estoy usando MVC3 y tengo áreas en mi aplicación. En general, todo funciona bien, puedo navegar a mi área (por ejemplo admin = Área, Departamento Controlador =) así:MVC con áreas - Html.ActionLink devuelve una URL/ruta incorrecta?

<%: Html.ActionLink("Departments", "DepartmentIndex", "Department", new { area = "Admin"}, null)%> 

Sin embargo, lo que he notado es que si no especifico la zona en mi ActionLink, por ejemplo

<%: Html.ActionLink("Test", "Index", "Home")%> 

Esto dejará de funcionar si he navegado hacia el área "Admin". es decir, mi url es ahora http://localhost/myproj/Admin/Home/Index en lugar de http://localhost/myproj/Home/Index

¿Alguna idea sobre lo que está pasando aquí?

Mis rutas son todas predeterminadas al crear una aplicación/Áreas de MVC. es decir,

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      new[] { "MyProj.Controllers" } 
     ); 
    } 

Y mi área de registro

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

Es esto por diseño? Esta publicación sugiere que se utilice en lugar de RouteLink ActionLink: dicen utilizar RouteLink Is it required to have "area" routevalue on actionlink if the application was grouped into areas?

+1

¿Es esto por diseño? Tal vez tienes que especificar explícitamente Areas = ""? – Raymond

+0

posible duplicado de [¿Es obligatorio tener un valor de ruta de "área" en actionlink si la aplicación se ha agrupado en áreas?] (Http://stackoverflow.com/questions/5549497/is-it-required-to-have-area- routevalue-on-actionlink-if-the-application-was-gr) –

Respuesta

7

This StackOverflow answer afirma correctamente que es necesario proporcionar el nombre Area si está usando áreas.

por ejemplo.

Html.ActionLink("Home", "Index", "Home", new { Area = "" }, new { }) 
Cuestiones relacionadas