有人可以解释为什么带有给定路由的代码会返回第一条路径吗?
routes.MapRoute(null, "user/approve", new { controller = "Users", action = "Approve" }),
routes.MapRoute(null, "user/{username}", new { controller = "Users", action = "Profile" }),
routes.MapRoute(null, "user/{username}/{action}", new { controller = "Users" }),
routes.MapRoute(null, "user/{username}/{action}/{id}", new { controller = "Users" }),
routes.MapRoute(null, "search/{query}", new { controller = "Artists", action = "Search", page = 1 }),
routes.MapRoute(null, "search/{query}/{page}", new { controller = "Artists", action = "Search" }),
routes.MapRoute(null, "music", new { controller = "Artists", action = "Index", page = 1 }),
routes.MapRoute(null, "music/page/{page}", new { controller = "Artists", action = "Index" })
var pageLinkValueDictionary = new RouteValueDictionary(this.linkWithoutPageValuesDictionary);
pageLinkValueDictionary.Add("page", pageNumber);
var virtualPathData = RouteTable.Routes.GetVirtualPath(this.viewContext.RequestContext, pageLinkValueDictionary);
此处GetVirtualPath始终返回user / approve,尽管路由中没有{page}参数。此外,一切都按预期工作,没有第一条路线。
我找到了这个链接http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2033,但它没有太大帮助。看起来GetVirtualPath没有实现大量的路由集。
我正在使用ASP.Net MVC 1.0。
更新。我可以重新排列路线并获得相应的结果。但我真的很想了解地球上为什么选择用户/批准路线。
答案 0 :(得分:1)
尝试在 RouteValueDictionary
中添加操作和控制器答案 1 :(得分:0)
使用此链接深入了解其工作原理http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2033。
在大多数情况下,重新排列路线应该有所帮助,尽管有时可能会采用“冒烟”的方法。