2011-11-29 9 views
5

Vorrei che i miei URL di utilizzare la convenzione:In che modo il mio percorso utilizza parametri facoltativi nel mezzo dell'URL utilizzando ASP MVC3?

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

piuttosto che

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

Ho provato la creazione di un percorso come segue:

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

Ma questo non funziona perché non sono in grado di rendere facoltativo il parametro id.

I seguenti URL funzionano:

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

Ma questi URL non lo fanno:

/campaign/create 
/campaign/indexempty 

MVC richiede solo Index per entrambi. Che cosa sto facendo di sbagliato?

risposta

7

Penso che probabilmente hai bisogno di due percorsi separati per questo.

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

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

Ha funzionato! Leggera modifica al codice: ho chiamato la prima route "CampaignDetail" in modo che non fosse in conflitto con la seconda rotta. – parleer

+0

Oh, mi sono perso. Sono contento che abbia aiutato. –

+0

Un'altra cosa: avere '{controller}/{id// action}' ha interferito con il mio percorso predefinito. Sono stato in grado di risolvere questo problema utilizzando esplicitamente la parola ** campagna ** nel mio url. Ad esempio: campagna/{id}/{azione} '. – parleer

Problemi correlati