【问题标题】:Getting current controller & action from within partial view从局部视图中获取当前控制器和操作
【发布时间】:2011-09-17 21:32:52
【问题描述】:

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

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

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

编辑以进一步澄清:

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

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

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

【问题讨论】:

  • 你的问题不是很清楚。你能说明你是怎么称呼这个部分的吗?
  • @darin-dimitrov 我已经更新了我的帖子,提供了一些进一步的信息。这有帮助吗?
  • 是的,它有帮助,你甚至可以得到答案:-)

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


【解决方案1】:

在您更新问题并显示您的代码之后,它更加清晰:您不包括部分视图。您正在调用子动作。 Html.PartialHtml.Action 之间存在巨大差异。因此,如果您想在此子操作中获取父上下文,您可以这样做:

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

【讨论】:

  • 正确。谢谢 Darin - 从 Forms 切换到 MVC 是一个相当大的飞跃,但像你这样的人正在使过渡变得更容易!
【解决方案2】:

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

@Html.Partial("Paging")

这可以在局部视图中完成

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2012-02-19
    • 2014-09-09
    相关资源
    最近更新 更多