在我正在开发的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