我的视图的一部分是通过RenderAction调用子动作呈现的。如何从此子操作中获取父控制器和操作。
当我使用..
@ViewContext.RouteData.Values["action"]
我找回了Child Action的名字,但我需要的是Parent / Calling动作。
由于
BTW我正在使用MVC 3和Razor。
答案 0 :(得分:73)
如果你想从子动作本身(而不是视图)中访问它,你可以使用
ControllerContext.ParentActionViewContext.RouteData.Values["action"]
答案 1 :(得分:22)
发现它......
how-do-i-get-the-routedata-associated-with-the-parent-action-in-a-partial-view
ViewContext.ParentActionViewContext.RouteData.Values["action"]
答案 2 :(得分:16)
如果partial在另一个partial中,除非找到最顶层的父视图内容,否则这将不起作用。您可以通过以下方式找到它:
var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
{
parentActionViewContext = parentActionViewContext.ParentActionViewContext;
}
答案 3 :(得分:1)
我遇到了同样的问题并提出了与Carlos Martinez相同的解决方案,除了我把它变成了扩展名:
public static class ViewContextExtension
{
public static ViewContext TopmostParent(this ViewContext context)
{
ViewContext result = context;
while (result.ParentActionViewContext != null)
{
result = result.ParentActionViewContext;
}
return result;
}
}
我希望这会帮助那些遇到同样问题的人。
答案 4 :(得分:0)
使用模型绑定来获取操作名称,控制器名称或任何其他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);
}