获取 ControllerName 和 ActionName 并在 Master Page 中填充 ViewData?

Posted

技术标签:

【中文标题】获取 ControllerName 和 ActionName 并在 Master Page 中填充 ViewData?【英文标题】:Get ControllerName and ActionName and populate the ViewData in Master Page? 【发布时间】:2009-07-31 13:05:37 【问题描述】:

我有一个SuperController,它将继承自所有控制器。在构造函数中,我试图填充 ViewData 使用 ControllerName 和 ActionName。

我不会将 ControllerName 和 ActionName 作为 ViewData 传递。我有一个需要 ControllerName 和 ActionName 的方法,我需要将方法的返回值作为 ViewData 传递。

我该怎么做?

【问题讨论】:

为了获得行动,控制器名称看这个***.com/a/31749391/4293929 【参考方案1】:

不要使用ViewData。在您的 Site.Master 中使用它:

<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>

SO - Getting the name of the controller and action method in the view in ASP.Net MVC

【讨论】:

这些名称将反映请求 url 的大小写。您对它们所做的操作不应该区分大小写。 (我掉进了那个陷阱。)【参考方案2】:

试试这个:

RouteData.Values.First().Value.ToString()

【讨论】:

如果你使用自定义路由(例如language/controller/actioncontroller可能不是第一个条目。【参考方案3】:

假设我正确阅读了您的帖子,并且您没有尝试访问视图中的控制器/操作名称,而是 INSTEAD 尝试对它们执行某些操作,并将结果放入 viewdata:

您不能在构造函数中执行此操作,因为尚未创建上下文。您需要重写 Initialize 方法:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    
        base.Initialize(requestContext);

        //here the routedata is available
        ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"];
    

(请注意,您可以只将 ControllerContext.RouteData 传递给您的函数并让它选择所需的值。)

【讨论】:

【参考方案4】:

我需要从视图中获取很多信息,并且我从一个稍微不同的角度来处理它——我为 htmlHelper 编写了一些扩展方法来提供当前的 ControllerName 和 ActionName。处理起来更容易一些,因为您不必担心潜入 ViewData[] 包或在适当的地方注入东西。

【讨论】:

我认为这样的扩展方法会更适合 UrlHelper,而不是 HtmlHelper。这两个值实际上与 HTML 无关。 好点——我认为实现甚至可能以这种方式重构。在这两种情况下,理论大致相同 - 将其拉出而不是将其推入。

以上是关于获取 ControllerName 和 ActionName 并在 Master Page 中填充 ViewData?的主要内容,如果未能解决你的问题,请参考以下文章

YII 技巧

请求参数和 PUT 方法

MVC中的传参并在View中获取

切换库当前页

Rails 5:获取完整的订单数量

上传功能