在我正在開發的ASP.NET MVC(測試版)網站上,有時會調用ActionLink將返回包含查詢字符串的URL。我已經隔離了產生這種行爲的情況,但我仍然不明白爲什麼,而不是生成乾淨的URL,它決定使用查詢字符串參數。我知道在功能上它們是相同的,但爲了保持URL的一致性(和外觀),這不是我想要的。爲什麼我的ASP.NET MVC路由中的查詢字符串?
這裏是我的路線:
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 = ""});
現在的問題,當我通過看一個名爲「標記的照片」由路徑描述視圖和執行的ActionLink只發生:
Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")
哪產生的網址:
http://domain/group/GROUPNAME?sortBy=
從其他視圖產生的URL是:
http://domain/group/GROUPNAME
我已經拉下菲爾的ASP.NET Routing Debugger,一切都按順序出現。這一個讓我難住。有任何想法嗎?
啊,我忽略了在路由調試器中查詢字符串URL正在執行第一個路由。在這種情況下,將SortBy =「」添加到第一個路由的默認值可以解決此問題,但是我不會遇到同樣的問題如果稍後嘗試按特定的事項進行排序?我只是刪除第一條路線? – 2008-10-22 12:12:04