Stellen Sie "Homepage" in Asp.Net MVC ein

105

In asp.net MVC ist die "Homepage" (dh die Route, die beim Aufrufen von www.foo.com angezeigt wird) auf Home / Index eingestellt.

  • Wo ist dieser Wert gespeichert?
  • Wie kann ich die "Homepage" ändern?
  • Gibt es etwas eleganteres als die Verwendung von RedirectToRoute () in der Index-Aktion des Home-Controllers?

Ich habe versucht, in meinem Projekt nach Home / Index zu suchen, konnte jedoch keine Referenz finden und konnte in IIS (6) nichts sehen. Ich habe mir die Seite default.aspx im Stammverzeichnis angesehen, aber das schien nichts Relevantes zu bewirken.

Vielen Dank

NikolaiDante
quelle

Antworten:

150

Schauen Sie sich die Default.aspx/Default.aspx.csund die Global.asax.cs an

Sie können eine Standardroute einrichten:

        routes.MapRoute(
            "Default", // Route name
            "",        // URL with parameters
            new { controller = "Home", action = "Index"}  // Parameter defaults
        );

Ändern Sie einfach die Controller- / Aktionsnamen auf die gewünschte Standardeinstellung. Dies sollte die letzte Route in der Routing-Tabelle sein.

Michael Stum
quelle
6
@NikolaiDante du solltest diesen Kommentar zu einer Antwort machen, da ich ihn fast verpasst habe und er schneller ist als diese Antwort. :) Danke
GazB
3
Wenn Sie in MVC 5. über eine Formularanmeldung verfügen und auf der Startseite auf Anmelden klicken, wird diese weiterhin zum Startcontroller umgeleitet, nicht zu Ihrem in der Route angegebenen benutzerdefinierten Controller. Registrieren Aktion wird ähnliche Sache tun. Sie müssen also neben der Änderung der Routenkonfiguration auch den Code ändern, in dem Sie RedirectionToAction ("Index", "Home") aufrufen, und ihn durch Ihre eigenen Controller- und Aktionsnamen ersetzen.
anIBMer
Es ist erwähnenswert, dass Sie mehrere Routen haben können . Dies könnte Ihre Standardeinstellung mit BLANK-URL-Parametern sein, aber Sie möchten wahrscheinlich eine zweite Route wie url: "{controller}/{action}/{id}". Geben Sie den Routen einfach unterschiedliche Namen.
Jess
Diese Antwort mag für Sie funktionieren, aber wenn Sie mehrere Routen benötigen, finden Sie hier stackoverflow.com/a/8470531/1804678
Jess
1
Diese Antwort ist nur für MVC 3 und früher geeignet. In meiner Antwort unten finden Sie den empfohlenen Ansatz für MVC 4 und höher.
JTW
19

ASP.NET Core

Das Routing wird in der ConfigureMethode der StartupKlasse konfiguriert . Um die "Homepage" einzustellen, fügen Sie einfach Folgendes hinzu. Dies führt dazu, dass Benutzer an den Controller weitergeleitet werden und die in der MapRoute-Methode definierte Aktion ausgeführt wird, wenn sie zur Basis-URL Ihrer Site navigieren, dh Ihre Site.com leitet Benutzer an Ihre Site weiter.

app.UseMvc(routes =>
{
   routes.MapRoute(
   name: "default",
   template: "{controller=FooController}/{action=Index}/{id?}");
});

Pre-ASP.NET Core

Verwenden Sie die RegisterRoutes-Methode in App_Start / RouteConfig.cs (MVC 3 und 4) oder Global.asax.cs (MVC 1 und 2), wie unten gezeigt. Dies führt dazu, dass Benutzer an den Controller weitergeleitet werden und die in der MapRoute-Methode definierte Aktion ausgeführt wird, wenn sie zur Basis-URL Ihrer Site navigieren. Das heißt, Ihre Site.com leitet den Benutzer an Ihre Site weiter.

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

    // Here I have created a custom "Default" route that will route users to the "YourAction" method within the "FooController" controller.
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "FooController", action = "Index", id = UrlParameter.Optional }
    );
}
JTW
quelle
5

Schritt 1: Klicken Sie in Ihrer Lösung auf Global.asax File.

Schritt 2: Gehen Sie dann zur Definition von

RouteConfig.RegisterRoutes(RouteTable.Routes);

Schritt 3: Ändern Sie den Controllernamen und den Ansichtsnamen

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

        routes.MapRoute(name: "Default",
                        url: "{controller}/{action}/{id}",
                        defaults: new { controller = "Home", 
                                        action = "Index", 
                                        id = UrlParameter.Optional }
                        );
    }
}
Ankur Shah
quelle
4
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",               
            defaults: new { controller = "Your Controller", action = "Your Action", id = UrlParameter.Optional }
        );
    }
}
Niraj
quelle
3

Überprüfen Sie die RegisterRoutes-Methode in global.asax.cs - dies ist der Standardort für die Routenkonfiguration ...

Michał Chaniewski
quelle
2

Attribut-Routing in MVC 5

Vor MVC 5 konnten Sie URLs bestimmten Aktionen und Controllern routes.MapRoute(...)zuordnen, indem Sie die Datei RouteConfig.cs aufrufen. Hier wird die URL für die Homepage gespeichert ( Home/Index). Wenn Sie jedoch die Standardroute wie unten gezeigt ändern,

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

Beachten Sie, dass dies Auswirkungen auf die URLs anderer Aktionen und Controller hat. Wenn Sie beispielsweise eine Controller-Klasse mit dem Namen ExampleControllerund eine darin enthaltene Aktionsmethode aufgerufen haben DoSomething, wird die erwartete Standard-URL verwendetExampleController/DoSomething funktioniert nicht mehr, da die Standardroute geändert wurde.

Eine Problemumgehung besteht darin, sich nicht mit der Standardroute herumzuschlagen und neue Routen in der Datei RouteConfig.cs für andere Aktionen und Controller wie diese zu erstellen.

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Example",
    url: "hey/now",
    defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);

Jetzt wird die DoSomethingAktion der ExampleControllerKlasse der URL zugeordnet hey/now. Dies kann jedoch jedes Mal mühsam werden, wenn Sie Routen für verschiedene Aktionen definieren möchten. In MVC 5 können Sie jetzt Attribute hinzufügen, um URLs mit Aktionen wie diesen abzugleichen.

public class HomeController : Controller
{
    // url is now 'index/' instead of 'home/index'
    [Route("index")]
    public ActionResult Index()
    {
        return View();
    }
    // url is now 'create/new' instead of 'home/create'
    [Route("create/new")]
    public ActionResult Create()
    {
        return View();
    }
}
Chris Gong
quelle
1

Ich habe die Antwort versucht, aber es hat bei mir nicht funktioniert. Das habe ich letztendlich gemacht:

Erstellen Sie einen neuen Controller DefaultController. In der Indexaktion habe ich eine Zeilenumleitung geschrieben:

return Redirect("~/Default.aspx")

Ändern Sie in RouteConfig.cs controller = "Default" für die Route.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
quelle
Sie haben wahrscheinlich vergessen, das Wort "Controller" im Namen des Controllers wegzulassen, um eine Standardroute zu erstellen
amarax
0

Wenn Sie den Router nicht ändern möchten, gehen Sie einfach zum HomeController und ändern Sie MyNewViewHere im Index wie folgt:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Martin Kei
quelle