如何从局部视图中获取电流控制器和动作?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我使用以下方法获取ASP.NETMVC 3中的当前控制器和操作:

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

这是完美的。但是,如果我从布局调用的部分视图中调用这一点,“布局”将作为当前控制器返回。这当然是正确的行为,但是有任何方法来访问父控制器的名称吗?

编辑以作进一步澄清:

我正在从内部调用我的菜单控制器和部分视图。_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();
}
用户回答回答于

我无意中发现了这个页面,在使用了部分调用之后,我正在寻找一种访问父控制器名称的方法。

@Html.Partial("Paging")

这可以在部分视图中完成,如

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

扫码关注云+社区