2012-01-09 15 views
14

Tengo dos áreas en mi proyecto. Ahora, cuando ejecuto el programa me sale este error:Se encontraron varios tipos que coinciden con el controlador llamado 'Inicio' - En dos áreas diferentes

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter. 

The request for 'Home' has found the following matching controllers: 
BaseAdminMVC.Areas.BaseAdmin.Controllers.HomeController 
BaseAdminMVC.Areas.TitomsAdmin.Controllers.HomeController 

he encontrado alguna fuente aquí: Multiple Controller name
Pero creo que sólo funciona para un área.
En mi caso, tengo dos proyectos en diferentes áreas. Espero que alguien sepa qué debo hacer para resolver el problema.
Aquí está el archivo Global.asax:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      string[] namespaces = new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers", "BaseAdminMVC.Areas.TitomsAdmin.Controllers"}; 

      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
       namespaces 
      ); 
     } 

Por cierto, también he controlador ("HomeController") fuera de la carpeta Area. Esto solo proporciona enlaces a dos proyectos BaseAdmin y TitomsAdmin.

me han tratado esta solución, pero aún no funciona :

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

      routes.MapRoute(
       "BaseAdmin", 
       "BaseAdmin/{controller}/{action}", 
       new { controller = "Account", action = "Index" }, 
       new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers" } 
      ); 

      routes.MapRoute(
       "TitomsAdmin", 
       "TitomsAdmin/{controller}/{action}", 
       new { controller = "Home", action = "Index" }, 
       new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" } 
      ); 

Gracias de antemano !!

+1

Re la edición: tiene que mover la ruta predeterminada hacia abajo (hasta el último lugar). El orden es importante aquí. –

+0

@HenkHolterman Todavía no funcionó. – fiberOptics

+0

Y aún no está claro qué significa "no funciona". –

Respuesta

18

No sé lo que pasa, pero este código funciona bien:

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 string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" } 
    ); 
} 
+28

Simplemente haciendo sonar ... (y sé que es un año tarde), pero recibí este error porque cambié el nombre de mi ensamblaje de salida y mi espacio de nombre predeterminado. Dejé el antiguo ensamblado compilado (del sitio MVC3) en la carpeta de depuración/bin del proyecto sin darme cuenta. Cuando el sitio se cargaba, recogía los controladores domésticos tanto del ensamblaje antiguo como del ensamblado que acababa de renombrarse y arrojaba el mismo error que recibía. Para resumir, entré en el contenedor, retiré el antiguo ensamblaje y todo comenzó a funcionar perfectamente. – OFConsulting

+0

¡Gracias por eso! Ahora estoy migrando a .Net 4.5 desde 4.0. Tus sugerencias podrían ser una ayuda si el mismo error aparece nuevamente. – fiberOptics

+1

@OFConsulting Sé que no debería decir "Gracias" en un comentario, pero FU - * - ¡GRACIAS! – Ydhem

6

Tengo este error después de hacer un cambio de nombre de mi espacio de nombres del proyecto/montaje.

Si ha cambiado el nombre del Espacio de nombres/Ensamblaje, es posible que tenga un ensamblado/archivo DLL sobrante del nombre anterior en su carpeta bin. Simplemente elimínelo de allí y debería funcionar.

2

Haga clic con el botón derecho en el proyecto y seleccione limpiar el proyecto. O bien, vacíe completamente el directorio bin y luego vuelva a compilar. Esto debería eliminarse de cualquier ensamblaje sobrante

Cuestiones relacionadas