我正在使用以下内容获取asp.net MVC3中的当前控制器和操作:
var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");
这完美无缺。但是,如果我从我的布局调用的局部视图中调用它,则“Layout”将作为当前控制器返回。这当然是正确的行为,但有没有办法访问父控制器的名称?
编辑以进一步说明:
我在_Layout.cshtml中调用我的菜单控制器和部分视图:
@Html.Action("Menu", "Layout")
然后从该菜单局部视图中,我调用返回当前操作和控制器的代码。
答案 0 :(得分:46)
在您更新问题并显示您的代码之后,更清楚的是:您没有包含部分视图。你正在召唤儿童行动。 Html.Partial
和Html.Action
之间存在巨大差异。因此,如果您想在此子操作中获取父上下文,则可以执行以下操作:
public ActionResult Menu()
{
var rd = ControllerContext.ParentActionViewContext.RouteData;
var currentAction = rd.GetRequiredString("action");
var currentController = rd.GetRequiredString("controller");
...
return View();
}
答案 1 :(得分:41)
我偶然发现这个页面在寻找使用Partial调用后访问父控制器名称的方法
@Html.Partial("Paging")
这可以在部分视图中完成
@{
var controller = ViewContext.RouteData.GetRequiredString("controller");
var action = ViewContext.RouteData.GetRequiredString("action");
}