2012-10-03 21 views
18

que tiene un controlador llamado Dashboard con 3 acciones: Summary, Details, y Status, ninguno de los cuales toma un ID o cualquier otro parámetro. Quiero que la URL /Dashboard dirija a la acción Summary del controlador Dashboard, como /Dashboard/Summary, pero no puedo encontrar la manera correcta de agregar la ruta. En Global.asax.cs, tengo el siguiente:Conjunto acción predeterminada (en lugar de índice) para el controlador de 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" } 
    ); 

Para la segunda parte, también he intentado:

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

y

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

pero siempre conseguir un 404 cuando se trata de acceso /Dashboard. Estoy bastante seguro de que me falta algo sobre el formato de los parámetros a MapRoute, pero no sé lo que es ...

Respuesta

29

Mueva su ruta tablero de instrumentos delante de la ruta por defecto:

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

El orden de las rutas cambia todo. Además, observe los cambios que realicé en la ruta Dashboard. El primer parámetro es el nombre de la ruta. La segunda es la URL, que coincide con las URL que comienzan con Dashboard, y permite otras acciones en su controlador Dashboard. Como puede ver, se usará de manera predeterminada la acción Summary.

4

Debe declarar la ruta global "predeterminada" al final.

0

Este conjunto predeterminado de Acción para cualquier asp.net controlador:

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