2009-11-03 20 views
6

sto continuando a schiavizzare la cosa MVC 2: Zone ...ASP.NET MVC 2 Preview 2: Aree duplicano regolatore problema

Ora ho due controller con lo stesso nome (HomeController) nella cartella principale Controllers e in una delle aree. Entrambi hanno diversi spazi dei nomi quindi ... teoricamente dovrebbero coesistere, ma non lo fanno. L'errore è:

Il nome del controller 'Home' è ambiguo tra le seguenti tipologie:

Namespace.HomeController

Namespace.Areas.AreaName.Controllers.HomeController

Questo non è legato al solo controller di casa (uno speciale?), Ma si applica a qualsiasi coppia in qualsiasi area.

Come ottenere la coesistenza dei controller con lo stesso nome in aree diverse?

Grazie per il vostro tempo :)

EDIT: E 'bene per lo stesso nome del controller all'interno di aree diverse: la registrazione di routing con namespace risolve il problema (grazie a Scott Allen article).

+0

Come sono impostati il ​​routing dell'area (AreaRegistration) e il routing predefinito? – bzlm

risposta

2

Se i due controller con lo stesso nome di classe si trovano in due aree diverse, questo funziona come previsto.

Nel tuo caso, hai un controller in un'area e un controller nella "cartella Controller predefiniti". Sei sicuro che questo è quello che vuoi? La tua "cartella controller predefinita" dovrebbe contenere qualche tipo di controller condiviso, come il controller account predefinito?

Questo è davvero un problema di routing ASP.NET rispetto a uno spazio dei nomi o un problema di nome classe. Il problema è molto probabile che si abbiano due percorsi per il nome del controller ambiguo; uno registrato tramite registrazione area e uno tramite la registrazione della route predefinita in RegisterRoutes.

Vedere anche this post about area ordering.

+0

+1 Grazie per il link, penso che il problema sia simile a quello descritto qui. Investire nell'instradamento predefinito – twk

6

Se crei lo spazio dei nomi dell'applicazione è MvcApplication1, hai scritto prova questo.

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

} 

Impostare lo spazio dei nomi del programma di routing principale "MvcApplication1.Controllers", in esecuzione.

Spero che questo suggerimenti.

+0

Funziona come un incantesimo, grazie –

+0

Questo ha funzionato anche per me. –