So legen Sie den Standard-Controller in asp.net MVC 4 und MVC 5 fest


106

Wie lege ich den Standard-Controller für mein ASP.NET MVC 4-Projekt fest, ohne ihn zum HomeController zu machen ?

Wie soll ich beim Start der Anwendung einen Standardbereich einrichten ?


Wie würde sich von "/" zu "/ home als Stammseite ändern? Dieses" / home "muss im Browser des Kunden sichtbar sein.
Andre Mesquita

Antworten:


165

Am besten ändern Sie Ihre Route. Die Standardroute (in Ihrem App_Start definiert) wird festgelegt/Home/Index

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);

als Standard-Landingpage. Sie können dies beliebig ändern.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);

13
In MVC 4 wird die Standardroute in App_Start / RouteConfig.cs
Eric Labashosky

Sehr richtig. Ich arbeite derzeit an Projekten in beiden und übersehen diese Dinge;)
Dave Alperovich

1
Dave hat recht, aber ich möchte hinzufügen, dass das Routing in MVC 4 nicht mehr in Global.asax erfolgt, sondern in RouteConfig.cs unter App_Start .
Barmherziger Samariter

2
Wie funktioniert das, wenn sich der Controller, auf den in der Standardroute verwiesen wird, in einem anderen Bereich befindet (dh nicht im Stammbereich)?
Superjos

Sie sollten in der Lage sein, die Standardroute zu "AreaName/{controller}/{action}/{id}"
ändern

30

Stellen Sie den folgenden Code in RouteConfig.cs im Ordner App_Start ein

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

Wenn es immer noch nicht funktioniert, führen Sie die folgenden Schritte aus

Zweiter Weg: Sie folgen einfach den folgenden Schritten:

1) Klicken Sie mit der rechten Maustaste auf Ihr Projekt

2) Wählen Sie Eigenschaften

3) Wählen Sie die Option Web und dann Spezifische Seite (Controller / Ansicht) und legen Sie dann Ihre Anmeldeseite fest

Hier ist Account mein Controller und Login meine Aktionsmethode (im Account Controller gespeichert).

Bitte schauen Sie sich den beigefügten Geben Sie hier die Bildbeschreibung einScreenshot an.


15
Bei Ihrem "zweiten Weg" geht es darum, was passiert, wenn Sie Ihr Webprojekt debuggen. Es hat nichts mit dem "Standard-Controller" zu tun, dh welche Seite angezeigt wird, wenn Sie zur Zielseite Ihrer Site navigieren.
Martin Liversage

25

Ich habe diese Frage nicht beantwortet gesehen:

Wie soll ich beim Start der Anwendung einen Standardbereich einrichten ?

So können Sie einen Standardbereich einrichten:

var route = routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    ).DataTokens = new RouteValueDictionary(new { area = "MyArea" });

1
tolle Frage, warum erschaffst du es nicht als eins?
stuartdotnet

Was ist ein Bereich? Wenn ich eine Ansicht definiere, wird das referenzierte Layout geladen und anschließend eine separate HTTP-Anforderung mit meinen Ansichtsdaten? (dh separate Ajax-Operation) oder wird das Layout gerendert und um meine Ansicht gewickelt?
Gus Crawford

2
@GusCrawford Was ist ein Bereich? Von msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : Um große Projekte aufzunehmen, können Sie mit ASP.NET MVC Webanwendungen in kleinere Einheiten aufteilen , die als Bereiche bezeichnet werden. Bereiche bieten eine Möglichkeit, eine große MVC-Webanwendung in kleinere Funktionsgruppen zu unterteilen. Ein Bereich ist effektiv eine MVC-Struktur innerhalb einer Anwendung. Eine Anwendung kann mehrere MVC-Strukturen (Bereiche) enthalten.
Amna Ali

Was die andere Frage betrifft, denke ich nicht, dass sie mit dieser Antwort zusammenhängt, und sie scheint selbst für die ursprüngliche Frage nicht relevant zu sein. Vielleicht solltest du es woanders posten.
Amna Ali

Ich frage separat in einem neuen Thread Antwort danke für die Perspektive.
Gus Crawford

2

Wenn Sie nur einen Controller haben und auf jede Aktion im Stammverzeichnis zugreifen möchten, können Sie den Namen des Controllers wie folgt überspringen

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.