Ответ 1
И если вы хотите получить доступ к этому из самого дочернего действия (а не из представления), вы можете использовать
ControllerContext.ParentActionViewContext.RouteData.Values["action"]
У меня есть часть моего представления, которое отображается через RenderAction, вызывающее дочернее действие. Как я могу получить родительский контроллер и действие из этого дочернего действия.
Когда я использую..
@ViewContext.RouteData.Values["action"]
Я возвращаю имя дочернего действия, но мне нужно действие Родитель/Вызов.
Спасибо
BTW Я использую MVC 3 с Razor.
И если вы хотите получить доступ к этому из самого дочернего действия (а не из представления), вы можете использовать
ControllerContext.ParentActionViewContext.RouteData.Values["action"]
Нашел...
how-do-i-get-the-routedata-associated-with-the-parent-action-in-a-partial-view
ViewContext.ParentActionViewContext.RouteData.Values["action"]
Если частичная часть находится внутри другого частичного, это не сработает, если мы не найдем верхнее большинство родительских представлений. Вы можете найти это с помощью этого:
var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}
У меня была та же проблема, и я пришел к такому же решению, что и Карлос Мартинес, но я превратил его в расширение:
public static class ViewContextExtension
{
public static ViewContext TopmostParent(this ViewContext context)
{
ViewContext result = context;
while (result.ParentActionViewContext != null)
{
result = result.ParentActionViewContext;
}
return result;
}
}
Я надеюсь, что это поможет другим, у кого такая же проблема.
Используйте привязку модели, чтобы получить имя действия, имя контроллера или любые другие значения 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);
}