2011-01-26 53 views
5

我在我区两条路线,一个自定义的和一个默认的备用路线,请参见下面注册路线

 var dashboardRoute = new DashboardRoute(
      ObjectFactory.GetInstance<PathResolver>(), 
      ObjectFactory.GetInstance<VirtualPathResolver>(), 
      null); 
     context.Routes.Add(dashboardRoute); 

     context.Routes.MapRoute(
      "Dashboard_Default", // Route name 
      "dashboard/{controller}/{action}/{id}", // URL with parameters 
      new { controller = "pages", action = "index", id = UrlParameter.Optional, area = "Dashboard" } // Parameter defaults 
     ); 

当我添加使用context.Routes.Add /图路线的最后的路线是两条路线不工作,但是当我在最后一个路由上使用context.MapRoute时,它的工作原理是,但我的自定义路由中的GetVirtualPath不用于actionlinks。我认为MapRoute只是context.Routes.Add的扩展。调试路由的最佳方法是什么?我已经使用Phil Haacks路由调试,但它不适用于我的自定义路由,有没有其他方式来调试路由?

我真的需要一些帮助。在我的仪表板区域 我的路线注册看起来像这样 -

 var dashboardRoute = new PagesRoute(
      ObjectFactory.GetInstance<PathResolver>(), 
      ObjectFactory.GetInstance<VirtualPathResolver>(), 
      null); 
     context.Routes.Add("Dashboard", dashboardRoute); 

     context.MapRoute(
      "Dashboard_default", 
      "dashboard/{controller}/{action}/{id}", 
      new { controller = "dashboard", action = "index", id = UrlParameter.Optional } 
     ); 

的PageRoute是一个定制的路线,你可以在这里找到代码http://bit.ly/er6HPn 通过这种途径活跃像这样的链接的伟大工程Html.ActionLink(“管理角色“,”管理员“,”帐户“),但是当我有一个链接,应该像我这样的Html.ActionLink(page.MetaData.Name,”edit“,”pages“,new {document = page} ,null)结果是http://stormbreaker.local/dashboard/pages/edit?document=Stormbreaker.Example.Models.Page,这意味着我的PageRoute中的GetVirtualPath永远不会被使用。任何人都可以向我解释方式,我怎么能解决这个问题?

回答

7

解决了这个问题,如果你注册自定义在RouteCollection对象RouteBase例如,IRouteWithArea界面让你联想与区域RouteBase实例

+0

这正好解决了我有一个问题 - 谢谢! – RPM1984 2012-01-24 03:12:44