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?
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 đó? –
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