2012-04-17 17 views
20

Sto usando ASP.Net MVC. Ecco il mio frammenti di codice da un corso chiamato regolatore:URL.Action include id quando si costruisce l'URL

public ActionResult List(int id) 
{ 
    var viewmodel.ShowUrl = Url.Action("Show", "Course"); 


    ... 
} 

public ActionResult Show(int id) 
{ 
    ... 
} 

viewmodel.ShowUrl raccoglie qualunque sia il valore è del parametro "id". Quindi viewmodel.ShowUrl diventa "/ Course/Show/151" (il valore di id è 151); Voglio essere in grado di impostare la parte id sul client in base all'interazione dell'utente. Voglio che il valore di viewmodel.ShowUrl sia "/ Course/Show".

Questo mi sembra un insetto. Non sto dicendo Url.Azione per includere un valore id. Lo sta facendo da solo. Se voglio impostare il valore id quindi vorrei fare qualcosa di simile:

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue}); 

Quindi, come si fa a prevenire MVC di aggiungere il valore id? Posso hardcode viewmodel.ShowUrl su "/ Course/Show" ma sembra essere una soluzione kludgy. Grazie.

+0

I cant bassino esattamente, ma la 'Routedata' è su' ViewData' e questo è il motivo per cui è passato. Penso che tu possa fare 'Url.Action (" Show "," Course ", new {});' o svuota 'RouteData' sull'oggetto' ViewData'. –

risposta

7

Sto indovinando nel tuo routing, non stai specificando che id è un parametro opzionale. Ecco la rotta predefinita in un progetto di esempio.

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

Nota l'inclusione di id = UrlParameter.Optional. Senza quello, otterresti il ​​comportamento che stai descrivendo perché pensa che l'ID sia obbligatorio.

Nota a margine, se l'azione Mostra non ha sempre un ID, allora dovrebbe essere annullabile o fornire un valore predefinito.

public ActionResult Show(int? id) 
public ActionResult Show(int id = 0) 

In caso contrario si otterrà un errore quando si tenta di caricare l'url senza il parametro id.

19

appena incontrato lo stesso problema e in modo da sapere, si può anche semplicemente usare una stringa vuota:

@Url.Action("Show", "Course", new { id = "" }) 
9

So che questo è vecchio, ma ho trovato prima questo, ma non come uno qualsiasi dei queste soluzioni, quindi ho continuato a cercare e ho trovato https://stackoverflow.com/a/19110921/1130636.

È possibile utilizzare UrlParameter.Optional per risolvere questo problema

Url.Action("Show", "Course", new { id = UrlParameter.Optional })

Problemi correlati