0

Ich versuche, die Routings wie folgt zu erreichen:mit Flächen in MVC5

etc ...

ich die Ideen mögen Verwenden von 'Bereiche' und möchte alle Codes durch Verwendung von Bereichen zu trennen. Also, habe ich meine Bereiche Struktur wie die folgende screnshot enter image description here

und den Code in ApplicationAreaRegistration.cs ist

public override string AreaName 
    { 
     get 
     { 
      return "Application"; 
     } 
    } 

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

Allerdings kann ich die Route nicht erreichen Ich möchte wie

http://example.com/Application/Index

Stattdessen wird es, http://example.com/Application/Application/Index

Ich habe versucht, das Standard-Routing ohne {Controller} in AreaRegistration zu ändern.

context.MapRoute(
       "Application_default", 
       "Application/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 

Aber ich habe, Controller ist erforderlich Bereich.

Ich weiß, ich kann leicht http://example.com/Application/Index bekommen, wenn ich den Controller in Root-Controller-Ordner setzen. Aber es bedeutet, dass ich meine Codes nicht mehr wie die Bereiche gruppieren konnte und sie wird über die MVC-Ordner verteilt.

Was ich gerne wissen würde, ist, ob ich erreichen kann, was ich will, indem ich die Gebiete benutze oder versuche ich zu tun, was unmöglich ist?

+1

Benötigen Sie wirklich Bereiche, um dies zu tun? Was Sie beschreiben, ist nur mehrere Controller. Sie könnten das Routing ändern, aber das ist in diesem Fall nicht notwendig. – DavidG

+0

Zum Beispiel, was würden Sie gerne tun, wenn Sie einem Bereich einen zweiten Controller hinzufügen? Was wäre die URL dann? – DavidG

+0

Ich werde keinen zweiten Controller zu einem Bereich hinzufügen. Wenn ich es addierte würde es sein Anwendung/Application/ActionA Anwendung/AnotherController/ActionA – TTCG

Antwort

1

Sie müssen der Route einen Standard-Controller-Namen hinzufügen, damit MVC weiß, was in den Controller-Routenwert eingefügt werden soll, wenn Sie ihn aus der URL entfernen.

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

Dies wird abgebrochen, wenn zusätzliche Controller zu einem Bereich hinzugefügt werden. – DavidG

+0

Ja. Für zusätzliche Controller können jedoch immer zusätzliche Routen hinzugefügt werden. Dies beantwortet die genaue Frage, die das OP gestellt hat. – NightOwl888