2011-01-03 16 views
19

Vorrei inviare più parametri a un'azione in ASP.NET MVC. Vorrei anche l'URL per assomigliare a questo:Invio di più parametri alle azioni in ASP.NET MVC

http://example.com/products/item/2 

invece di:

http://example.com/products/item.aspx?id=2 

mi piacerebbe fare lo stesso per il mittente, così, ecco l'URL corrente:

http://example.com/products/item.aspx?id=2&sender=1 

Come posso eseguire entrambi con C# in ASP.NET MVC?

risposta

26

Se stai bene con il passaggio delle stringhe di query, è abbastanza semplice. È sufficiente modificare il metodo di azione per prendere un parametro aggiuntivo con un nome corrispondente:

// Products/Item.aspx?id=2 or Products/Item/2 
public ActionResult Item(int id) { } 

diventerebbero:

// Products/Item.aspx?id=2&sender=1 or Products/Item/2?sender=1 
public ActionResult Item(int id, int sender) { } 

ASP.NET MVC farà il lavoro di cablaggio tutto per voi.

Se si desidera un URL cercando pulito, è sufficiente aggiungere la nuova rotta per Global.asax.cs:

// will allow for Products/Item/2/1 
routes.MapRoute(
     "ItemDetailsWithSender", 
     "Products/Item/{id}/{sender}", 
     new { controller = "Products", action = "Item" } 
); 
+0

cosa è il formato URL? – Reza

+0

Non dimenticare di impostare le definizioni appropriate per il percorso nel tuo global.asax. –

+0

@ Reza - Ho aggiunto gli URL come commenti nel codice. Se si desidera un URL più pulito, è necessario aggiungere un percorso personalizzato a global.asax.cs. –

4

è possibile utilizzare qualsiasi regola percorso per esempio:

{controller}/{action}/{param1}/{param2} 

inoltre è possibile utilizzare ottenere params come :baseUrl?param1=1&param2=2

e verificare this link, spero che vi aiuterà.

12

Se si desidera un URL carino, aggiungere quanto segue al numero global.asax.cs.

routes.MapRoute("ProductIDs", 
    "Products/item/{id}", 
    new { controller = Products, action = showItem, id="" } 
    new { id = @"\d+" } 
); 

routes.MapRoute("ProductIDWithSender", 
    "Products/item/{sender}/{id}/", 
    new { controller = Products, action = showItem, id="" sender="" } 
    new { id = @"\d+", [email protected]"[0-9]" } //constraint 
); 

e quindi di utilizzare le azioni necessarie:

public ActionResult showItem(int id) 
{ 
    //view stuff here. 
} 

public ActionResult showItem(int id, int sender) 
{ 
    //view stuff here 
} 
Problemi correlati