从局部视图中获取当前控制器和操作

我正在使用以下内容获取asp.net MVC3中的当前控制器和操作:

var currentAction = routeData.GetRequiredString("action"); var currentController = routeData.GetRequiredString("controller"); 

这非常有效。 但是,如果我从我的布局调用的局部视图中调用它,则“Layout”将作为当前控制器返回。 这当然是正确的行为,但有没有办法访问父控制器的名称?

编辑以进一步说明:

我在_Layout.cshtml中调用我的菜单控制器和部分视图:

 @Html.Action("Menu", "Layout") 

然后从该菜单局部视图中,我调用返回当前操作和控制器的代码。

在您更新问题并显示您的代码之后,更清楚的是:您没有包含部分视图。 你正在召唤儿童行动。 Html.PartialHtml.Action之间存在巨大差异。 因此,如果您想在此子操作中获取父上下文,则可以执行以下操作:

 public ActionResult Menu() { var rd = ControllerContext.ParentActionViewContext.RouteData; var currentAction = rd.GetRequiredString("action"); var currentController = rd.GetRequiredString("controller"); ... return View(); } 

我偶然发现这个页面在寻找使用Partial调用后访问父控制器名称的方法

 @Html.Partial("Paging") 

这可以在局部视图中完成

 @{ var controller = ViewContext.RouteData.GetRequiredString("controller"); var action = ViewContext.RouteData.GetRequiredString("action"); }