2011-01-03 19 views
19

Chciałbym wysłać wiele parametrów do działania w ASP.NET MVC. Chciałbym również URL wyglądać tak:Wysyłanie wielu parametrów do akcji w ASP.NET MVC

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

zamiast:

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

Chciałbym zrobić to samo dla nadawcy, jak również, oto aktualny adres URL:

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

Jak osiągnąć oba z C# w ASP.NET MVC?

Odpowiedz

26

Jeśli dobrze jest przekazać rzeczy w ciągu zapytania, jest to całkiem proste. Wystarczy zmienić sposób działania podjąć dodatkowy parametr o nazwie pasującej:

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

staną:

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

ASP.NET MVC będzie wykonywać pracę okablowanie wszystko dla ciebie.

Jeśli chcesz czysty patrząc URL, wystarczy dodać nową trasę do Global.asax.cs:

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

jaki jest format adresu URL? – Reza

+0

Nie zapomnij ustawić odpowiednich definicji trasy w pliku global.asax. –

+0

@Reza - Dodałem adresy URL jako komentarze w kodzie. Jeśli chcesz mieć czystszy adres URL, musisz dodać niestandardową trasę do pliku global.asax.cs. –

4

można użyć dowolnego regułę trasy na przykład:

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

możesz także użyć params takich jak :baseUrl?param1=1&param2=2

i sprawdzić this link, mam nadzieję, że ci to pomoże.

12

Jeśli chcesz mieć ładny adres URL, dodaj następujący kod do swojego 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 
); 

A potem użyć wymagające działania:

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

public ActionResult showItem(int id, int sender) 
{ 
    //view stuff here 
} 
Powiązane problemy