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 ?

Adrian10 BEN
quelle
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 }
);
Dave Alperovich
quelle
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.

Nimesh
quelle
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" });
Amna Ali
quelle
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 }
);
Manjoor
quelle