2012-04-06 5 views
1

Ich versuche, mein MVC-Projekt in mehrere Bereiche zu trennen. Also ich habe 3 Bereiche 1) crm 2) Dienstleistungen 3) Web. Ich möchte, dass PublicWeb mein Standard ist. das heißt, es sollte zugegriffen werden wie www.mysitename.com/mycontroller/myaction (kein Bereich Name dazwischen) und andere zwei mit dem Gebietsnamen zugegriffen werden (www.mysitename.com/crm/mycontroller/myaction). Welche Routing/Area Konfiguration sollte ich haben? Ich habe versucht AreaRegistration.RegisterAllAreas(); und es funktioniert nur für meine Standard (Web). Wenn ich auf die anderen 2 zugreife, hat das einen 404-Fehler ausgelöst.ASP.NET MVC Bereiche Routing funktioniert nicht mit Standardroute

Ich versuchte indidually wie die unter einem

 var area2reg = new crmAreaRegistration(); 
     var area2context = new AreaRegistrationContext(area2reg.AreaName, RouteTable.Routes); 
     area2reg.RegisterArea(area2context); 

     var area1reg = new webAreaRegistration(); 
     var area1context = new AreaRegistrationContext(area1reg.AreaName, RouteTable.Routes); 
     area1reg.RegisterArea(area1context); 

Dann meine publicweb Werke zu registrieren. Aber wenn ich auf mein Forum zugreife, warf es diesen Fehler,

Mehrere Typen wurden gefunden, die den Steuerpult genannt "nach Hause" zusammenbringen. Dies kann passieren, wenn die Route, die diese Anfrage bedient ('crm/{controller}/{aktion}/{id}') keine Namespaces angibt, um nach einem Controller zu suchen, der der Anfrage entspricht. Wenn dies der Fall ist, registrieren Sie diese Route, indem Sie eine Überladung der MapRoute-Methode aufrufen, die einen Namespaces-Parameter verwendet.

Meine RegisterArea Funktion für web ist diese

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "web_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

     ); 
    } 

und derjenige für crm wird diese

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "crm_default", 
      "crm/{controller}/{action}/{id}", 
      new { controller = "home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Wie kann ich damit umgehen?

Antwort

1

denke ich, Jonathan S-Lösung einen Versuch auf jeden Fall wert ist, aber Sie könnten einen anderen Ansatz in Betracht ziehen. Das würde bedeuten, Ihre web Dateien an den Standardspeicherorten zu speichern. Die Routing-Engine sucht in den Bereichen nicht nach diesen Dateien, wenn kein Bereich Teil der Anfrage ist.

2

Von dem, was ich sehen kann die Gegend Routen gut aussehen. Haben Sie die Standardroute in Ihrem Global.asax aktualisiert, um Anfragen an den Web-Bereich zu senden?

Etwas wie:

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

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", 
      new { area = "web", controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

    } 
+0

ja, ich habe viel versucht, Standard-Routing und Bereich zusammen zu verwenden .so sollte dies die richtige Lösung sein. –