获得当前的控制器&部分视图内的动作

时间:2011-06-18 18:55:11

标签: c# asp.net asp.net-mvc-3

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

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

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

编辑以进一步说明:

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

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

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

2 个答案:

答案 0 :(得分:46)

在您更新问题并显示您的代码之后,更清楚的是:您没有包含部分视图。你正在召唤儿童行动。 Html.PartialHtml.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");
}