2009-11-03 21 views
6

sigo esclavizar al MVC 2 cosa: Áreas ...ASP.NET MVC 2 Preview 2: Áreas duplican controlador problema

Ahora tengo dos controladores con el mismo nombre (HomeController) en la carpeta principal de controladores y en una de las áreas. Ambos tienen diferentes espacios de nombres, así que ... teóricamente deberían coexistir, pero no es así. El error es:

El nombre del controlador 'Home' es ambiguo entre los siguientes tipos:

Namespace.HomeController

Namespace.Areas.AreaName.Controllers.HomeController

Esto no está relacionado solo con el controlador Home (¿uno especial?), Sino que se aplica a cualquier par en cualquier área.

¿Cómo lograr la coexistencia de los mismos controladores de nombres dentro de diferentes áreas?

Gracias por su tiempo :)

EDIT: Está bien que los mismos nombre del controlador dentro de diferentes áreas: registro de enrutamiento con el espacio de nombres resuelve el problema (gracias a Scott Allen article).

+0

¿Cómo se configuran el enrutamiento de su área (Registro de área) y su enrutamiento predeterminado? – bzlm

Respuesta

2

Si los dos controladores con el mismo nombre de clase se encuentran en dos áreas diferentes, esto funciona como se esperaba.

En su caso, tiene un controlador en un área y un controlador en la "carpeta predeterminada Controladores". ¿Estás seguro de que esto es lo que quieres? ¿Se supone que su "carpeta de Controladores predeterminada" contiene algún tipo de controladores compartidos, como el controlador de cuenta predeterminado?

Esto es realmente un problema de enrutamiento ASP.NET en lugar de un problema de nombre de clase o nombre de clase. El problema es muy probable que tenga dos rutas para el nombre ambiguo del controlador; uno registrado a través del registro de área y otro a través del registro de ruta predeterminado en RegisterRoutes.

También, vea this post about area ordering.

+0

+1 Gracias por el enlace, creo que el problema es similar al descrito allí. Invertir el enrutamiento predeterminado – twk

6

Si crea el espacio de nombres de la aplicación es MvcApplication1, usted escribió intente esto.

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

    AreaRegistration.RegisterAllAreas(); 
    routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }, // Parameter defaults 
    null, 
    new[] { "MvcApplication1.Controllers" } 
); 

} 

Establecer el espacio de nombres del controlador de ruta raíz "MvcApplication1.Controllers", ejecutándose.

Espero que este consejo.

+0

Esto funciona como un amuleto, gracias –

+0

Esto también funcionó para mí. –

Cuestiones relacionadas