2009-06-09 32 views
40

Tôi có một trang được định tuyến như /Comments/Search/3 nơi tôi tìm kiếm và hiển thị tất cả các nhận xét của chuỗi "3".ASP.NET MVC: định tuyến url và chuỗi truy vấn

Tôi đang thêm chức năng sắp xếp (theo ngày, tác giả, v.v.). Cách tốt nhất để xử lý nó là gì? /Comments/Search/3/Sort/Author hoặc /Comments/Search/3?sort=author?

Làm cách nào để tự động xử lý chuỗi truy vấn sort = author làm tham số trong MVC?

Cảm ơn

Trả lời

57

Tôi thích:/Comments/Search/3? Sort = author. Chuỗi truy vấn là một nơi tốt để truyền các tham số có lập trình, đặc biệt nếu tham số (như trong trường hợp này) không quan trọng cho các mục đích SEO. Nếu tham số có một số ý nghĩa ngữ nghĩa làm cụm từ tìm kiếm, URL đầu tiên sẽ tốt hơn.

Trong một phương pháp điều khiển, bạn có thể sử dụng một cái gì đó như thế này:

public ActionResult Search(int id, string sort) 

ASP.NET MVC sẽ tự động dây lên chuỗi truy vấn giá trị cho các tham số của phương pháp của bạn.

Sử dụng các tuyến đường sau

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

/Comments/Tìm kiếm/3? Sort = tác giả sẽ gọi tìm kiếm (3, "tác giả")

/Comments/Tìm kiếm/3 sẽ gọi tìm kiếm (3 , null)

Hãy ghi nhớ rằng id là bắt buộc để url này sẽ thất bại: /Comments/Tìm kiếm

+0

Tôi nghĩ rằng tôi muốn đi cho giải pháp này. Làm cách nào để định tuyến và đặt mặc định, vì sắp xếp = 3 là tùy chọn? – pistacchio

+0

Do quy ước về cấu hình, hãy nhớ rằng các tham số của bạn cho phương thức của bạn PHẢI được gọi là 'id' và 'sort' tương ứng. –

+2

Trong MVC 2 bạn có thể sử dụng tham số UrlParameter.Optional và trong action sử dụng 'int? id' thay vì 'int id' nếu bạn muốn nó là tùy chọn và'/Comments/Search' để hiển thị giao diện người dùng tìm kiếm mặc định với văn bản đầu vào trống. – CallMeLaNN

19

ASP.NET MVC sẽ xử lý tự động trong trường hợp chuỗi truy vấn. Bạn chỉ cần thêm thông số string sort vào hành động của mình.

Điều nào tốt hơn? Cá nhân, tôi sử dụng đường dẫn để kiểm soát nội dung đang được hiển thị và chuỗi truy vấn để kiểm soát bản trình bày (cách hiển thị, định dạng, ...). Vì vậy, để phân loại, tôi sẽ đi với phương thức chuỗi truy vấn. Nhưng tôi không nghĩ rằng có một bất lợi kỹ thuật trong cả hai cách tiếp cận.

Các vấn đề liên quan