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

Как получить текущий контроллер и действия изнутри действия Child?

У меня есть часть моего представления, которое отображается через RenderAction, вызывающее дочернее действие. Как я могу получить родительский контроллер и действие из этого дочернего действия.

Когда я использую..

@ViewContext.RouteData.Values["action"]

Я возвращаю имя дочернего действия, но мне нужно действие Родитель/Вызов.

Спасибо

BTW Я использую MVC 3 с Razor.

4b9b3361

Ответ 1

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

ControllerContext.ParentActionViewContext.RouteData.Values["action"] 

Ответ 3

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

var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
    parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}

Ответ 4

У меня была та же проблема, и я пришел к такому же решению, что и Карлос Мартинес, но я превратил его в расширение:

public static class ViewContextExtension
{
    public static ViewContext TopmostParent(this ViewContext context)
    {
        ViewContext result = context;
        while (result.ParentActionViewContext != null)
        {
            result = result.ParentActionViewContext;
        }
        return result;
    }
}

Я надеюсь, что это поможет другим, у кого такая же проблема.

Ответ 5

Используйте привязку модели, чтобы получить имя действия, имя контроллера или любые другие значения URL:

routes.MapRoute("City", "{citySlug}", new { controller = "home", action = "city" });

[ChildActionOnly]
public PartialViewResult Navigation(string citySlug)
{
    var model = new NavigationModel()
    {
        IsAuthenticated = _userService.IsAuthenticated(),
        Cities = _cityService.GetCities(),
        GigsWeBrought = _gigService.GetGigsWeBrought(citySlug),
        GigsWeWant = _gigService.GetGigsWeWant(citySlug)
    };

    return PartialView(model);
}