2015-07-20 17 views
7

Meine Lösungsstruktur ist die folgende:MVC Routing mit verschiedenen Bereichen mit mehreren Controllern

Areas 
    - Games 
     -Controllers 
     -Views etc 
    - Movies 
     -Controllers 
      - MoviesController.cs 
      - MovieCalendarController.cs 
      - MovieSearchController.cs 
     -Views etc 

was Nun würde Ich mag in der Lage sein, dies zu tun: Navigieren Sie zu https://localhost/Movies/ und schlug den Index des MoviesController.cs

Wechseln Sie zu: https://localhost/Movies/Calendar/ und drücken Sie den Index des MovieCalendarController.cs

und navigieren schließlich zu https://localhost/Movies/Search/ und schlug den Index des MovieSearchController.cs

Was habe ich versucht, aber funktioniert nicht Fehler (No route in the route table matches the supplied values. bekommen):

MovieAreaRegistration.cs

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

      context.MapRoute(
       "Calendar_default", 
       "Movies/Calendar/", 
       new { controller = "MovieCalendar", action = "Index", id = UrlParameter.Optional } 
      ); 


      context.MapRoute(
       "Search_default", 
       "Movies/Search/{action}/{id}", 
        new { controller = "MovieSearch", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

Apologies, I auf Bereiche neu bin und Routing

Update

Nach usin g Attribut-Routing Ich habe in dieses Problem fiel:

Mehrere Controller-Typen wurden gefunden, die die URL entsprechen. Dies kann passieren, wenn Attributrouten auf mehreren Controllern mit der angeforderten URL übereinstimmen.

Die Anforderung folgende passende Controller-Typen gefunden hat: MovieCalendar.UI.Areas.Movies.Controllers.MovieCalendarController MovieCalendar.UI.Areas.Movies.Controllers.MoviesController

Filme-Controller

[RouteArea("Movies")] 
[Route("{action}")] 
public class MoviesController : BaseController 
{ 
} 

Kalender-Controller

[RouteArea("Movies")] 
[RoutePrefix("Calendar")] 
[Route("{action=Index}")] 
public class MovieCalendarController : BaseController 
{ 
} 

Dies geschieht beim Zugriff auf die URL http://localhost/Movies/Calendar in der Hoffnung, dass es mich auf die MovieCalendarController Indexaktionsmethode führt. Ich kann sehen, warum es sich beschweren, weil es eine ActionMethod in der MovieController genannten Calendar (There is not) geben könnte.

+0

Haben Sie so etwas in Ihrem global.asax Application_Start ausgeführt? Areas.MVC.MVCAreaRegistration.RegisterAllAreas() wobei Areas.MVC.MVCAreaRegistration der Namespace für Ihre RegisterAreas-Methode ist? – Tyddlywink

+0

Die MovieAreaRegistration war ein Gerüstcode, der von Visual Studio erstellt wurde. Im Bereich Filme. –

Antwort

2

Sie können mit Attribut Routing besser dran sein. Es werden Ihnen dies zu tun:

public class MoviesController : Controller { 

     [Route("Movies")] 
     public ActionResult Index() { 
      return this.View(); 
     } 
    } 

    public class MovieCalendarController : Controller { 

     [Route("Movies/Calendar")] 
     public ActionResult Index() { 
      return this.View(); 
     } 
    } 

Und dann können Sie Ihre aktuellen Route Zuordnungen loszuwerden und so Ihre Routen initialisieren:

RouteTable.Routes.MapMvcAttributeRoutes(); 

Weitere Informationen über Attribut-Routing gefunden werden können here .Einschließlich Kalender

aktualisieren

[RouteArea("Movies")] 
[Route("{action}")] 
public class MoviesController : BaseController 
{ 
} 

Diese Route mit Filme/ gefolgt von einer beliebigen Zeichenkette beginnen wird Urls entsprechen. Diese Route kollidiert mit:

[RouteArea("Movies")] 
[RoutePrefix("Calendar")] 
[Route("{action=Index}")] 
public class MovieCalendarController : BaseController 
{ 
} 

Convention-basierte Routing wird schwierig sein mit der Namenskonvention, die Sie für Ihre Controller verwenden.

+0

Das scheint für mich nicht zu funktionieren. Ich bekomme immer 404's. Ich habe die 'MapMvcAttributeRoutes();' auch in meine 'RouteConfig.cs' eingefügt ... –

+0

Ich habe meine Frage mit dem Problem, das ich konfrontiert bin, aktualisiert –

+1

aktualisiert meine Antwort Knospe. –

Verwandte Themen