web-dev-qa-db-de.com

Legen Sie in ASP.NET MVC 3 die Standardaktion (anstelle des Index) für den Controller fest

Ich habe einen Controller namens Dashboard mit 3 Aktionen: Summary, Details und Status, von denen keine eine ID oder andere Parameter annimmt. Ich möchte, dass die URL /Dashboard an die Summary-Aktion des Dashboard-Controllers weiterleitet, wie /Dashboard/Summary, aber ich kann nicht die richtige Methode zum Hinzufügen der Route ermitteln. In Global.asax.cs habe ich Folgendes:

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

routes.MapRoute(
    "/Dashboard",
    "Dashboard",
    new { controller = "Dashboard", action = "Summary" }
    );

Für den zweiten Teil habe ich auch versucht:

routes.MapRoute(
    "/Dashboard",
    "{controller}",
    new { controller = "Dashboard", action = "Summary" }
    );

und

routes.MapRoute(
    "/Dashboard",
    "{controller}",
    new { action = "Summary" }
    );

ich bekomme jedoch immer eine 404, wenn ich auf /Dashboard zugreifen möchte. Ich bin mir ziemlich sicher, dass mir etwas über das Format für die Parameter von MapRoute fehlt, aber ich weiß nicht, was es ist ...

21
Cody

Verschieben Sie Ihre Dashboard-Route vor die Standardroute:

routes.MapRoute(
    "Dashboard",
    "Dashboard/{action}",
    new { controller = "Dashboard", action = "Summary" }
);

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

Die Reihenfolge der Routen ändert alles. Beachten Sie auch die Änderungen, die ich an der Dashboard-Route vorgenommen habe. Der erste Parameter ist der Name der Route. Zweitens ist die URL die URLs, die mit Dashboard beginnen, und andere Aktionen in Ihrem Dashboard-Controller zulässt. Wie Sie sehen, wird standardmäßig die Aktion Summary verwendet.

35
Gromer

Sie müssen die Catch-All-Route "Default" zuletzt angeben.

5
tuxedo25

Dies setzt die Standardaktion für jeden Controller asp.net:

routes.MapRoute("Dashboard", "{controller}/{action}", 
defaults: new { controller = "Dashboard", action = "Summary" });
0
Newred