2012-01-09 4 views
14

Ho due aree nel mio progetto. Ora, quando faccio funzionare il programma ottengo questo errore:Sono stati trovati più tipi che corrispondono al controller denominato "Home" - In due aree diverse

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 

ho trovato qui qualche fonte: Multiple Controller name
Ma penso che funziona solo per una zona.
Nel mio caso ho due progetti in aree diverse. Spero che qualcuno possa dire cosa dovrei fare per risolvere il problema.
Ecco il file 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 
      ); 
     } 

A proposito, ho anche controllore ("HomeController") al di fuori della cartella Area. Questo fornisce solo collegamenti a due progetti BaseAdmin e TitomsAdmin.

ho provato questa soluzione, ma ancora non funziona:

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" } 
      ); 

Grazie in anticipo !!

+1

Modifica: è necessario spostare il percorso predefinito verso il basso (fino all'ultima posizione). L'ordine è importante qui. –

+0

@HenkHolterman Ancora non ha funzionato. – fiberOptics

+0

E non è ancora chiaro cosa significa "non funziona". –

risposta

18

Non so cosa succederà, ma questo codice funziona bene:

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

Mi sto avvicinando .. (e so che è in ritardo di un anno), ma ho ricevuto questo errore perché ho cambiato il nome del mio gruppo di uscita e il mio spazio dei nomi predefinito. Ho lasciato il vecchio assembly compilato (dal sito MVC3) nella cartella debug/bin del progetto senza rendersene conto. Quando il sito veniva caricato, raccoglieva i controller domestici sia dal vecchio assembly, sia dal nuovo assembly rinominato e lanciava lo stesso errore che si otteneva. Per farla breve, sono andato nel cestino, ho rimosso il vecchio assemblaggio e tutto ha funzionato perfettamente. – OFConsulting

+0

Grazie per quello! Sto migrando a .Net 4.5 dalla 4.0. I tuoi suggerimenti potrebbero essere di aiuto se lo stesso errore si ripresenta. – fiberOptics

+1

@OFConsulting So che non dovrei dire "Grazie" in un commento, ma FU - * - GRAZIE! – Ydhem

6

ho ottenuto questo errore dopo aver fatto una ridenominazione del mio progetto namespace/assemblaggio.

Se si è rinominato lo spazio dei nomi/l'assieme, è possibile che sia presente un assieme/dll avanzato dal nome precedente nella cartella bin. Basta cancellarlo da lì e dovrebbe funzionare.

2

Fare clic con il pulsante destro del mouse sul progetto e selezionare Pulisci il progetto. Oppure svuotare completamente la directory bin e quindi ricrearla di nuovo. Questo deve essere rimosso da eventuali gruppi rimanenti