2011-11-29 20 views
5

Me gustaría que mis direcciones URL a utilizar la convención:¿Cómo puede mi ruta usar parámetros opcionales en el medio de la URL utilizando ASP MVC3?

/{controller}/{id}/{action} 

en lugar de

/{controller}/{action}/{id} 

He intentado establecer una ruta de la siguiente manera:

routes.MapRoute(
      "Campaign", 
      "{controller}/{action}/{id}", 
      new { controller = "Campaign", action = "Index", id = UrlParameter.Optional } 
     ); 

Pero esto no funciona porque no puedo hacer que el parámetro id sea opcional.

Los siguientes URL Cómo funcionan:

/campaign/1234/dashboard 
/campaign/1234/edit 
/campaign/1234/delete 

Pero estas URL no hacer:

/campaign/create 
/campaign/indexempty 

MVC sólo llama Index para ambos. ¿Qué estoy haciendo mal?

Respuesta

7

Creo que probablemente necesite dos rutas separadas para esto.

routes.MapRoute(
      "CampaignDetail", 
      "{controller}/{id}/{action}", 
      new { controller = "Campaign", action = "Index" } 
     ); 

routes.MapRoute(
      "Campaign", 
      "{controller}/{action}", 
      new { controller = "Campaign", action = "Index" } 
     ); 
+0

Eso funcionó! Leve modificación de su código: denominé la primera ruta "CampaignDetail" para que no entrara en conflicto con la segunda ruta. – parleer

+0

Oh, me lo perdí. Me alegra que haya ayudado. –

+0

Una cosa más - Tener '{controller}/{id}/{action}' interfirió con mi ruta predeterminada. Pude solucionar esto al usar explícitamente la palabra ** campaña ** en mi url. es decir 'campaign/{id}/{action}'. – parleer

Cuestiones relacionadas