在区域注册中注册路线

时间:2011-01-26 20:00:31

标签: asp.net-mvc-3 asp.net-mvc-routing

我的区域有两条路线,一条是自定义路线,一条是默认的后备路线,见下文

        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 / MapRoute添加两个路由时,最后一个路由不起作用,但是当我在最后一个路由上使用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(“管理角色”,“manageroles”,“帐户”),但当我有一个链接,应该使用我的自定义路线,如Html.ActionLink(page.MetaData。名称,“编辑”,“页面”,新{document = page},null)结果为http://stormbreaker.local/dashboard/pages/edit?document=Stormbreaker.Example.Models.Page,这意味着我的PageRoute中的GetVirtualPath永远不会被使用。任何人都可以向我解释方式以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:7)

解决它,如果在RouteCollection对象中注册自定义RouteBase实例,IRouteWithArea接口允许您将该RouteBase实例与区域相关联