Регистрация маршрутов в области регистрации - PullRequest
5 голосов
/ 26 января 2011

У меня есть два маршрута в моей области, один нестандартный и один запасной маршрут по умолчанию, см. Ниже

        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 в моем пользовательском маршруте не используется для ссылок действий. Я думал, что MapRoute был просто расширением для context.Routes.Add? Каков наилучший способ отладки маршрутов? Я использовал Phil Haacks route debug, но он не работает с моим пользовательским маршрутом, есть ли другой способ отладки маршрутов?

Мне действительно нужна помощь. Мои регистрации маршрутов в области моей панели выглядят так -

        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», «account»), но когда у меня есть ссылка, которая должна работать с моим пользовательским маршрутом, таким как Html.ActionLink (page.MetaData. Имя, "edit", "pages", new {document = page}, null) результат равен http://stormbreaker.local/dashboard/pages/edit?document=Stormbreaker.Example.Models.Page,, это означает, что GetVirtualPath в моем PageRoute никогда не используется. Может кто-нибудь объяснить мне, как и как я мог это исправить?

1 Ответ

7 голосов
/ 28 января 2011

Решено, если вы регистрируете пользовательский экземпляр RouteBase в объекте RouteCollection, интерфейс IRouteWithArea позволяет связать этот экземпляр RouteBase с областью

...