ASP.NET MVC Маршрутизация с областями - PullRequest
1 голос
/ 13 октября 2011

У меня есть область под названием Организации. В этой области у меня есть вид со ссылкой Url.Action.

По умолчанию, если я просто передам имя действия, оно вызовет действие в текущем контроллере в области «Организация».

У меня есть контроллер в папке контроллеров (не в области), и я хочу вызвать действие в этом контроллере.

По сути, это действие будет вызывать любая область. Каков наилучший способ достижения этого?

Если это абсолютно неправильный способ, я открыт для предложений.

Спасибо

РЕДАКТИРОВАТЬ - Вот маршруты

Global.asax

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Columns",
            "Columns/Columns/{ID}/{idList}",
            new { controller = "Columns", action = "UserColumnList" }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Account", action = "Login", id = UrlParameter.Optional } // Parameter defaults
        );

    }

OrganisationsAreaRegistration.cs

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Organisations_view",
            "Organisations/{id}/View",
            new { controller = "Manage", action = "View" }
        );

        context.MapRoute(
            "Organisations_general",
            "Organisations/{id}/General",
            new { controller = "Manage", action = "General" }
        );

        context.MapRoute(
            "Organisations_addressbook",
            "Organisations/{id}/AddressBook",
            new { controller = "Manage", action = "AddressBook" }
        );

        context.MapRoute(
            "Organisations_departments",
            "Organisations/{id}/Departments",
            new { controller = "Manage", action = "Departments" }
        );

        context.MapRoute(
            "Organisations_people",
            "Organisations/{id}/People",
            new { controller = "Manage", action = "People" }
        );

        context.MapRoute(
            "Organisations_events",
            "Organisations/{id}/Events",
            new { controller = "Manage", action = "Events" }
        );

        context.MapRoute(
            "Organisations_journal",
            "Organisations/{id}/Journal",
            new { controller = "Manage", action = "Journal" }
        );

        context.MapRoute(
            "Organisations_tasks",
            "Organisations/{id}/Tasks",
            new { controller = "Manage", action = "Tasks" }
        );

        context.MapRoute(
            "Organisations_edit",
            "Organisations/{id}/Edit",
            new { controller = "Manage", action = "Edit" }
        );

        context.MapRoute(
           "Organisations_journalnew",
           "Organisations/{id}/{action}",
           new { controller = "Manage" }
       );

        context.MapRoute(
            "Organisations_recent",
            "Organisations/{action}",
            new { controller = "Manage", action = "Index" }
        );

        context.MapRoute(
            "Organisations_default",
            "Organisations/{controller}/{action}/{id}",
            new { controller = "Manage", action = "Index", id = UrlParameter.Optional }
        );


    }

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Это на самом деле довольно легко. В Url.Action просто добавьте пустое значение area, например:

@Url.Action("Index", "Home", new { area = "" })

При анализе ссылки MVC распознает, что цель не находится в области, и не будет использовать какие-либо маршруты области для генерации ссылки.

0 голосов
/ 13 октября 2011

Чтобы этот контроллер работал, вам нужно было бы создать конкретный маршрут, и я бы поместил его над другими маршрутами (если он не достаточно конкретен, чтобы другие маршруты не попадали в него).

Я был бы рад показать вам это через код, но нам нужно увидеть вашу текущую таблицу маршрутов и соответствующие контроллеры.

...