Получение текущего контроллера и действия из частичного представления - PullRequest
19 голосов
/ 18 июня 2011

Я использую следующее для получения текущего контроллера и действия в asp.net MVC3:

var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");

Это работает отлично. Однако, если я вызываю это из частичного представления, которое вызывается из моего макета, в качестве текущего контроллера возвращается «Макет». Это, конечно, правильное поведение, но есть ли способ получить доступ к имени родительского контроллера?

Изменить для уточнения:

Я вызываю мой контроллер меню и частичное представление из _Layout.cshtml:

@Html.Action("Menu", "Layout")

Затем из этого частичного представления меню я вызываю код, который возвращает текущее действие и контроллер.

Ответы [ 2 ]

46 голосов
/ 18 июня 2011

После вашего обновленного вопроса и показа кода вам станет намного понятнее: вы не включаете частичное представление. Вы называете дочерним действием. Существует огромная разница между Html.Partial и Html.Action. Поэтому, если вы хотите получить родительский контекст внутри этого дочернего действия, вы можете сделать это:

public ActionResult Menu()
{
    var rd = ControllerContext.ParentActionViewContext.RouteData;
    var currentAction = rd.GetRequiredString("action");
    var currentController = rd.GetRequiredString("controller");
    ...
    return View();
}
41 голосов
/ 25 июля 2012

Я наткнулся на этой странице в поисках способа доступа к имени родительских контроллеров после вызова с использованием Partial

@Html.Partial("Paging")

Это можно сделать в частичном виде как

@{
    var controller = ViewContext.RouteData.GetRequiredString("controller");
    var action = ViewContext.RouteData.GetRequiredString("action");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...