GetVirtualPath没有任何意义

时间:2010-03-09 10:32:53

标签: c# asp.net-mvc

有人可以解释为什么带有给定路由的代码会返回第一条路径吗?

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。

更新。我可以重新排列路线并获得相应的结果。但我真的很想了解地球上为什么选择用户/批准路线。

2 个答案:

答案 0 :(得分:1)

尝试在 RouteValueDictionary

中添加操作控制器

答案 1 :(得分:0)

使用此链接深入了解其工作原理http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2033

在大多数情况下,重新排列路线应该有所帮助,尽管有时可能会采用“冒烟”的方法。