GetVirtualPath没有任何意义
问题描述:
任何人都可以解释为什么此代码与给定的路线返回第一条路线?GetVirtualPath没有任何意义
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总是返回用户/批准,虽然路由中没有{page}参数。而且,没有第一条路线,一切都按预期工作。
我已经找到这个链接http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2033但它不是很有帮助。它看起来像GetVirtualPath没有实现大量的路由集合。
我正在使用ASP.Net MVC 1.0。
更新。我可以重新排列路线并获得适当的结果。但我真的很想明白为什么在地球上选择用户/批准路线。
答
尝试增加行动和控制器在RouteValueDictionary
答
使用此链接钻研为什么它确实http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2033的方式。
在大多数情况下,重新布置路线应该有所帮助,但有时候它可能是一种“烟雾和镜子”的方法。
不能。我的方法是行为和控制器不可知的,因此,上下文。 – 2010-03-09 11:25:31
有趣的是,我昨天看着它,并做到了这一点。 – 2010-04-18 23:58:32