如何从子动作内部获取当前控制器和动作?
Posted
技术标签:
【中文标题】如何从子动作内部获取当前控制器和动作?【英文标题】:How to get current controller and action from inside Child action? 【发布时间】:2010-12-10 18:58:21 【问题描述】:我有一部分视图是通过调用子操作的 RenderAction 呈现的。如何从这个子动作中获取父控制器和动作。
当我使用..
@ViewContext.RouteData.Values["action"]
我得到了子操作的名称,但我需要的是父/调用操作。
谢谢
顺便说一句,我正在使用带有 Razor 的 MVC 3。
【问题讨论】:
【参考方案1】:如果您想从子操作本身(而不是视图)中访问它,您可以使用
ControllerContext.ParentActionViewContext.RouteData.Values["action"]
【讨论】:
对于任何对此答案和 JBeckton 的答案感到困惑的人来说,区别在于您是从控制器内部还是从视图内部获取此值。根据需要使用 ControllerContext 或 ViewContext 进行匹配。给定代码的起始 @ 符号,原始问题似乎是在视图中使用它。【参考方案2】:找到了……
how-do-i-get-the-routedata-associated-with-the-parent-action-in-a-partial-view
ViewContext.ParentActionViewContext.RouteData.Values["action"]
【讨论】:
【参考方案3】:如果部分在另一个部分中,除非我们找到最顶层的父视图内容,否则这将不起作用。你可以用这个找到它:
var parentActionViewContext = ViewContext.ParentActionViewContext;
while (parentActionViewContext.ParentActionViewContext != null)
parentActionViewContext = parentActionViewContext.ParentActionViewContext;
【讨论】:
【参考方案4】:我遇到了与 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;
我希望这能帮助其他有同样问题的人。
【讨论】:
【参考方案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);
【讨论】:
以上是关于如何从子动作内部获取当前控制器和动作?的主要内容,如果未能解决你的问题,请参考以下文章