Как получить текущий контроллер и действие изнутри дочернего действия? - PullRequest
55 голосов
/ 10 декабря 2010

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

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

@ViewContext.RouteData.Values["action"]

Мне возвращается название Дочернего действия, но мне нужно действие Родитель / Зов.

Спасибо

Кстати, я использую MVC 3 с Razor.

Ответы [ 5 ]

73 голосов
/ 17 декабря 2010

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

ControllerContext.ParentActionViewContext.RouteData.Values["action"] 
22 голосов
/ 10 декабря 2010
16 голосов
/ 23 октября 2012

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

var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
    parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}
1 голос
/ 13 мая 2014

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

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

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

0 голосов
/ 15 августа 2012

Используйте привязку модели для получения имени действия, имени контроллера или любых других значений 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);
}    
...