2011-01-03 23 views
19

Tôi muốn gửi nhiều tham số đến một hành động trong ASP.NET MVC. Tôi cũng muốn URL trông như thế này:Gửi nhiều tham số đến các hành động trong ASP.NET MVC

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

thay vì:

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

Tôi muốn làm tương tự cho người gửi là tốt, đây là URL hiện tại:

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

Làm cách nào để thực hiện cả hai với C# trong ASP.NET MVC?

Trả lời

26

Nếu bạn đồng ý với việc chuyển mọi thứ trong chuỗi truy vấn, điều này khá dễ dàng. Đơn giản chỉ cần thay đổi phương pháp hành động để có một tham số bổ sung với một tên phù hợp:

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

Sẽ trở thành:

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

ASP.NET MVC sẽ làm công việc của hệ thống dây điện mọi thứ cho bạn.

Nếu bạn muốn có một URL tìm sạch, bạn chỉ cần thêm các tuyến đường mới để Global.asax.cs:

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

định dạng URL là gì? – Reza

+0

Đừng quên đặt định nghĩa thích hợp cho tuyến đường trong global.asax của bạn. –

+0

@Reza - Tôi đã thêm URL làm nhận xét trong mã. Nếu bạn muốn có một URL sạch hơn, bạn cần thêm một tuyến tùy chỉnh vào global.asax.cs. –

4

bạn có thể sử dụng bất kỳ quy tắc đường ví dụ:

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

bạn cũng có thể sử dụng các thông số như :baseUrl?param1=1&param2=2

và kiểm tra this link, tôi hy vọng nó sẽ giúp bạn.

12

Nếu bạn muốn có URL đẹp, hãy thêm thông tin sau vào 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 
); 

Và sau đó sử dụng các hành động cần thiết:

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

public ActionResult showItem(int id, int sender) 
{ 
    //view stuff here 
} 
Các vấn đề liên quan