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

Jon*_*han 19 c# asp.net asp.net-mvc-3

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

var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");
Run Code Online (Sandbox Code Playgroud)

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

编辑以进一步说明:

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

@Html.Action("Menu", "Layout")
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 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();
}
Run Code Online (Sandbox Code Playgroud)

  • 发现.谢谢Darin - 从Forms转换到MVC是一个相当大的跳跃,但像你这样的人正在进行更容易的过渡! (2认同)

Tom*_*Tom 41

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

@Html.Partial("Paging")
Run Code Online (Sandbox Code Playgroud)

这可以在局部视图中完成

@{
    var controller = ViewContext.RouteData.GetRequiredString("controller");
    var action = ViewContext.RouteData.GetRequiredString("action");
}
Run Code Online (Sandbox Code Playgroud)

  • 你让我今天一整天都感觉很好!:) (2认同)