13

Estoy tratando de establecer el URL predeterminado de mi aplicación MVC a una vista dentro de un área de mi aplicación. El área se llama "común", el controlador "Home" y la vista "índice".ASP.NET MVC URL predeterminada Ver

He intentado configurar el DefaultUrl en la sección de formularios de web.config a "~/Common/Home/Index" sin éxito.

También he intentado asignar una nueva ruta en global.asax, por lo tanto:

routes.MapRoute(
     "Area", 
     "{area}/{controller}/{action}/{id}", 
     new { area = "Common", controller = "Home", action = "Index", id = "" } 
    ); 

Una vez más, sin ningún resultado.

+1

En una investigación adicional, parece que la solicitud está siendo dirigido al controlador correcto (es decir, MyApp.Areas.Common.Controllers.HomeController) con o sin su cambio sugerido. Sin embargo, en ambos casos, ViewEngine solo busca las carpetas ~/Views/Home y ~/Views/Shared en lugar de comenzar con ~/Areas/Common/Views/Home y ~/Areas/Common/Views/Shared. Extrañamente, si creo una página con un ActionLink para el mismo método de controlador (es decir, Index()), entonces funciona bien. Hmmm. –

+0

http://stackoverflow.com/questions/2140208/how-to-set-a-default-route-to-an-area-in-mvc Eso puede ayudar. Tuve un problema similar. – LiamB

Respuesta

12

La ruta sólo se enumeran funciona si escribe explícitamente la URL:

yoursite.com/{area}/{controller}/{action}/{id} 

Lo esa ruta dice es:

Si consigo una petición que tiene una validez {area}, una válida {controller} en esa área, y un {action} válido en ese controlador, luego enrutarlo allí.

Lo que queremos es que por defecto a ese controlador si sólo hay que visitar su sitio, yoursite.com:

routes.MapRoute(
    "Area", 
    "", 
    new { area = "Common", controller = "Home", action = "Index" } 
); 

Lo que esto dice es que si no lo añaden nada a http://yoursite.com entonces para encaminar a la siguiente acción: Common/Home/Index

Además, colóquelo en la parte superior de la tabla de rutas.

se asegura de que también está dejando saber MVC para registrar las áreas que tiene en la aplicación:

Ponga lo siguiente en su método de Application_Start en el archivo Global.asax.cs:

AreaRegistration.RegisterAllAreas(); 
+1

Para mí esto es buscar en el archivo raíz, no en el área. – FrenkyB

0

Lo que estás hacer parece correcto. Si tuviera que adivinar, diría que esto está sucediendo debido a la forma en que está ejecutando su sitio web. En Visual Studio, si seleccionó una vista específica cuando presiona F5, esa vista será la Url inicial; intente seleccionar el Proyecto y luego presione F5.

+0

Me temo que esa no es la causa del problema. Aunque gracias por tu sugerencia. –

+0

Valió la pena intentarlo: D –

7

Lo que tienes que hacer es:

  • Quitar ruta predeterminada de global.asax.cs

    //// default route map will be create under area 
    //routes.MapRoute(
    // name: "Default", 
    // url: "{controller}/{action}/{id}", 
    // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    //); 
    
  • SecurityAreaRegistration.cs Actualizar en el área común

  • Agregar siguiente ruta mapeo:

    context.MapRoute(
        "Default", 
        "", 
        new { controller = "Home", action = "Index", id = "" } 
    ); 
    
0

En la Global.asax elimine la.MapRoute

y hacer que parezca que

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

entonces bajo yourareaAreaRegistration.cs de la zona (que está allí si se ha añadido la zona a través VS)

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    //This is the key one   
    context.MapRoute("Root", "", new { controller = "Home", action = "Login" }); 

    //Add more MapRoutes if needed 
} 
Cuestiones relacionadas