2008-10-22 28 views
8

Trên trang ASP.NET MVC (Beta) mà tôi đang phát triển, đôi khi các cuộc gọi đến ActionLink sẽ trả lại cho tôi các URL chứa các chuỗi truy vấn. Tôi đã cô lập hoàn cảnh tạo ra hành vi này, nhưng tôi vẫn không hiểu tại sao, thay vì tạo ra một URL sạch, nó quyết định sử dụng tham số chuỗi truy vấn. Tôi biết rằng chúng hoạt động giống nhau, nhưng đối với sự nhất quán (và sự xuất hiện) của các URL thì đây không phải là những gì tôi muốn.Tại sao các chuỗi truy vấn trong tuyến đường ASP.NET MVC của tôi?

Dưới đây là tuyến đường của tôi:

routes.MapRoute(
    "Photo Gallery Shortcut", 
    "group/{groupname}", 
    new { controller = "Photos", action = "All", Id = "" }); 

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first 
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}", 
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" }); 

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly 
    "group/{groupname}/Photos/{action}/{sortby}", 
    new { controller = "Photos", action = "All", Id = "", SortBy = "" }); 

routes.MapRoute(
    "Group", //<-- "Group" Category defined above 
    "group/{groupname}/{controller}/{action}/{id}", 
    new {controller = "Photos", action = "Index", Id = ""}); 

Bây giờ vấn đề chỉ xảy ra khi tôi đang xem xét các quan điểm được mô tả bởi các tuyến đường có tên là "Tagged hình ảnh" và thực hiện ActionLink qua:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home") 

nào tạo URL:

http://domain/group/GROUPNAME?sortBy= 

Từ bất kỳ chế độ xem nào khác URL được tạo là:

http://domain/group/GROUPNAME 

Tôi đã kéo xuống số ASP.NET Routing Debugger của Phil và mọi thứ xuất hiện theo thứ tự. Cái này làm tôi bí. Ý tưởng nào?

Trả lời

3

Không chắc tại sao các chế độ xem khác nhau đang tạo ra các URL khác nhau.

Nhưng bạn có thể loại bỏ tham số sortBy đó bằng cách gán giá trị mặc định cho tuyến đường đầu tiên.

mới {SortBy = ""}

Trong thế hệ, nếu SortBy phù hợp với mặc định, động cơ tuyến đường sẽ bỏ tham số đó (nếu nó trong chuỗi truy vấn).

+0

Ah, tôi đã bỏ qua điều đó trong Trình gỡ lỗi tuyến, URL chuỗi truy vấn đang thực hiện tuyến đường đầu tiên đó. Thêm SortBy = "" vào các giá trị mặc định của tuyến đầu tiên sẽ giải quyết nó trong trường hợp này, nhưng tôi sẽ không gặp vấn đề tương tự Nếu sau này tôi cố gắng sắp xếp theo thứ gì đó cụ thể? Tôi chỉ cần loại bỏ tuyến đường đầu tiên đó? –

+0

Khi bạn chỉ định một giá trị sortBy khác, thông số chuỗi truy vấn sortBy = blah sẽ được thêm vào. – CVertex

0

Tôi nghĩ rằng đó là việc chọn Tuyến đường đầu tiên của bạn. Nó cũng có tất cả hành động. Và vì sắp xếp không được chỉ định, nó sẽ hiển thị nó như một tham số chuỗi truy vấn

Điều này sẽ vẫn làm việc với phương thức hành động 'Tất cả' trên PhotosController, vì nó chỉ điền tham số sortby với giá trị chuỗi truy vấn.

Trong Trình gỡ lỗi tuyến đường là nó đang thực thi tuyến đường thứ 3 hoặc số 1?

2

Bạn sẽ phải sử dụng các tuyến được đặt tên ở đây, chứ không phải tuyến hành động, vì cách định tuyến hoạt động trong ASP.NET, vì nó "khớp đầu tiên" chứ không phải "kết hợp tốt nhất".

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