2012-10-03 12 views
18

Mam kontroler o nazwie Dashboard z 3 działaniami: Summary, Details i Status, z których żaden nie ma identyfikatora ani żadnych innych parametrów. Chcę, aby adres URL /Dashboard był kierowany do akcji Summary kontrolera Dashboard, tak jak robił to /Dashboard/Summary, ale nie mogę znaleźć prawidłowego sposobu dodania trasy. W Global.asax.cs, mam następujące:Ustaw domyślną akcję (zamiast indeksu) dla kontrolera w ASP.NET MVC 3

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" } 
    ); 

Dla drugiej strony, próbowałem też:

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

i

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

ale zawsze uzyskać 404 podczas próby dostęp /Dashboard. Jestem prawie pewien, że brakuje mi czegoś o formacie parametrów do MapRoute, ale nie wiem, co to jest ...

Odpowiedz

29

Najedź trasę Dashboard przed trasy domyślne:

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 
); 

Kolejność trasach zmienia wszystko. Zwróć też uwagę na zmiany, które wprowadziłem na trasie Dashboard. Pierwszy parametr to nazwa trasy. Drugi to adres URL, który pasuje do adresów URL rozpoczynających się od Dashboard i umożliwiający inne akcje w kontrolerze Dashboard. Jak widać, domyślnie będzie to akcja Summary.

4

Musisz zadeklarować ostatnią trasę "Domyślna" catch-all.

0

Ten zestaw domyślna akcja dla każdego ASP.NET Kontroler:

routes.MapRoute("Dashboard", "{controller}/{action}", 
defaults: new { controller = "Dashboard", action = "Summary" }); 
Powiązane problemy