13

Ich versuche, die Standard-URL meiner MVC-Anwendung auf eine Ansicht innerhalb eines Bereichs meiner Anwendung festzulegen. Der Bereich heißt "Common", der Controller "Home" und die Ansicht "Index".ASP.NET MVC Standard-URL-Ansicht

Ich habe versucht, die defaultUrl im Formularbereich von web.config zu "~/Common/Home/Index" ohne Erfolg.

Ich habe auch versucht, eine neue Route in global.asax Mapping, also:

routes.MapRoute(
     "Area", 
     "{area}/{controller}/{action}/{id}", 
     new { area = "Common", controller = "Home", action = "Index", id = "" } 
    ); 

Wieder ohne Erfolg.

+1

Bei der weiteren Untersuchung scheint es, dass der Antrag wird mit oder ohne Ihre vorgeschlagene Änderung an den richtigen Controller (dh MyApp.Areas.Common.Controllers.HomeController) weitergeleitet. In beiden Fällen durchsucht die ViewEngine jedoch nur die Ordner ~/Views/Home und ~/Views/Shared, anstatt mit ~/Areas/Common/Views/Home und ~/Areas/Common/Views/Shared zu beginnen. Seltsamerweise, wenn ich eine Seite mit einem ActionLink zu der gleichen Controller-Methode (d. H. Index()) erstelle, funktioniert es OK. Hmmm. –

+0

http://stackoverflow.com/questions/2140208/how-to-set-a-default-route-to-an-area-in-mvc Das kann helfen. Ich hatte ein ähnliches Problem. – LiamB

Antwort

12

Die Route, die Sie nur aufgelistet funktioniert, wenn sie ausdrücklich die URL aus:

yoursite.com/{area}/{controller}/{action}/{id} 

Was die Route sagt, ist:

Wenn ich eine Anfrage erhalten, die ein gültiges {area} hat, ein gültiges {controller} in diesen Bereich, und eine gültige {action} in diesem Controller, dann es dorthin leiten.

Was Sie wollen, ist zu diesem Controller auf Standard wenn sie nur Ihre Website besuchen, yoursite.com:

routes.MapRoute(
    "Area", 
    "", 
    new { area = "Common", controller = "Home", action = "Index" } 
); 

Was dies sagt, ist, dass, wenn sie anhängen nichts zu http://yoursite.com dann es auf dem Weg zum folgenden Aktion: Common/Home/Index

Legen Sie es auch an der Spitze Ihrer Routen Tabelle.

Stellt sicher, dass Sie auch im Stich gelassen MVC die Bereiche registrieren wissen Sie in der Anwendung haben:

gebe folgende in Ihrer Application_Start Methode in der Global.asax.cs Datei:

AreaRegistration.RegisterAllAreas(); 
+1

Für mich sucht dies in der Root-Datei, nicht in der Gegend. – FrenkyB

0

Was du bist Das scheint richtig zu sein. Wenn ich raten müsste, würde ich sagen, dass dies aufgrund der Art und Weise geschieht, wie Sie Ihre Website betreiben. Wenn Sie in Visual Studio eine bestimmte Ansicht ausgewählt haben, wenn Sie F5 drücken, wird diese Ansicht die Start-URL sein. Versuchen Sie, das Projekt auszuwählen und dann F5 zu drücken.

+0

Ich fürchte, das ist nicht die Ursache des Problems. Danke für deinen Vorschlag. –

+0

Es war einen Versuch wert: D –

7

Was Sie tun müssen, ist:

  • Remove Default Route von global.asax.cs

    //// default route map will be create under area 
    //routes.MapRoute(
    // name: "Default", 
    // url: "{controller}/{action}/{id}", 
    // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    //); 
    
  • aktualisieren SecurityAreaRegistration.cs in Bereich Gemeinschafts

  • Add folgende Route Zuordnung:

    context.MapRoute(
        "Default", 
        "", 
        new { controller = "Home", action = "Index", id = "" } 
    ); 
    
0

In der Global.asax löschen Sie die.MapRoute

und es wie

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

dann unter den Bereich der yourareaAreaRegistration.cs aussehen (seine dort, wenn Sie den Bereich durch VS hinzugefügt)

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    //This is the key one   
    context.MapRoute("Root", "", new { controller = "Home", action = "Login" }); 

    //Add more MapRoutes if needed 
}