Как узнать, в какую область вызывается действие моего контроллера MVC? - PullRequest
2 голосов
/ 22 марта 2010

Я хочу знать, как из действия контроллера я мог бы определить область, в которой находится контроллер, через инфраструктуру MVC (я имею в виду, не заставляя все контроллеры в данной области наследоваться от базового контроллера с этой информацией),

Меня особенно интересует случай дочерних действий (действий контроллера, визуализируемых через RenderAction), например, область вызывающего родительского контроллера.

Я использую ASP .NET MVC 2.0RTM

1 Ответ

2 голосов
/ 22 марта 2010

Вы можете получить его из словаря RouteData, который является членом вашего ControllerContext.

В вашем методе контроллера (это проверенный код):

string area = this.DataContext.RouteData.DataTokens["Area"].ToString();

Маршрут, который я использую, выглядит следующим образом:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "MyRoute",
        MyArea/{controller}/{action}/{id},
        new {controller = "MyController", Action="Index" }
    );
}

Обратите внимание, что, поскольку мои маршруты области более специфичны, чем мои корневые маршруты (в global.asax), я сначала регистрирую маршруты области .

Вам следует проверить свои маршруты с помощью отладчика маршрутов Фила Хаака и убедиться, что ваш URL-адрес соответствует правильному маршруту.

...