2009-11-03 13 views
6

Ich bin weiterhin das MVC-2, was zu versklaven: Bereiche ...ASP.NET MVC 2 Preview 2: Bereiche doppelte Controller Problem

Jetzt mit dem gleichen Namen (Homecontroller) in dem Hauptcontroller-Ordner Ich habe zwei Controllern und in einem der Bereiche. Beide haben unterschiedliche Namespaces, also ... sollten theoretisch koexistieren, aber nicht. Der Fehler ist:

Der Controller Name 'Home' ist nicht eindeutig zwischen den folgenden Typen:

Namespace.HomeController

Namespace.Areas.AreaName.Controllers.HomeController

Dies bezieht sich nicht nur auf den Home-Controller (spezielle?), Sondern gilt für jedes Paar in allen Bereichen.

Wie erreichen Sie die Koexistenz der gleichen Namen-Controller in verschiedenen Bereichen?

Vielen Dank für Ihre Zeit :)

EDIT: Es ist für gleiche Controller-Namen in verschiedenen Bereichen in Ordnung: mit Namespace-Routing-Registrierung löst das Problem (dank Scott Allen article).

+0

Wie wird Ihr Bereichsrouting (AreaRegistration) und Ihr Standardrouting eingerichtet? – bzlm

Antwort

2

Wenn sich die beiden Controller mit demselben Klassennamen in zwei verschiedenen Bereichen befinden, funktioniert dies wie erwartet.

In Ihrem Fall haben Sie einen Controller in einem Bereich und einen Controller im Ordner "Standard-Controller". Bist du sicher, dass du das willst? Soll Ihr "Standard-Controller-Ordner" eine Art von gemeinsam genutzten Controllern enthalten, z. B. den Standard-Account-Controller?

Dies ist wirklich ein ASP.NET Routing-Problem im Gegensatz zu einem Namespace oder Klassennamen Problem. Das Problem besteht höchstwahrscheinlich darin, dass Sie zwei Routen zum mehrdeutigen Controllernamen haben. eine über die Bereichsregistrierung und eine über die Standardroutenregistrierung in RegisterRoutes registriert.

Siehe auch this post about area ordering.

+0

+1 Danke für den Link, ich denke das Problem ist ähnlich wie dort beschrieben. Investing das Standard-Routing – twk

6

Wenn Sie Anwendung Namespace ist MvcApplication1 erstellen, haben Sie versucht, dies zu schreiben.

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

} 

Legen Sie Root-Route-Controller-Namespace "MvcApplication1.Controllers", es läuft.

Hope diese Tipps.

+0

Das funktioniert wie ein Charme, danke –

+0

Das hat für mich auch funktioniert. –