【问题标题】:GetVirtualPath not making any senseGetVirtualPath 没有任何意义
【发布时间】:2010-03-31 13:25:47
【问题描述】:

谁能解释为什么这个带有给定路由的代码会返回第一条路由?

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。

更新。我可以重新安排路线并获得适当的结果。但我真的很想了解为什么它会选择用户/批准路线。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    尝试在RouteValueDictionary

    中添加actioncontroller

    【讨论】:

    • 不能。我的方法是动作和控制器不可知的,因此是上下文。
    • 有趣的是,我昨天正在看它并确实做到了。
    【解决方案2】:

    使用此链接深入了解它为何会以 http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2033 的方式工作。

    在大多数情况下,重新安排路线应该会有所帮助,尽管有时它可能是一种“冒烟和照镜子”的方法。

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 2020-11-30
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多