Подтвердить что ты не робот

Получение текущего контроллера и действия из частичного просмотра

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

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

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

Изменить для дальнейшего уточнения:

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

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

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

4b9b3361

Ответ 1

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

public ActionResult Menu()
{
    var rd = ControllerContext.ParentActionViewContext.RouteData;
    var currentAction = rd.GetRequiredString("action");
    var currentController = rd.GetRequiredString("controller");
    ...
    return View();
}

Ответ 2

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

@Html.Partial("Paging")

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

@{
    var controller = ViewContext.RouteData.GetRequiredString("controller");
    var action = ViewContext.RouteData.GetRequiredString("action");
}