Asp.net mvc 获取ControllerName和ActionName并在母版页中填充ViewData?

Asp.net mvc 获取ControllerName和ActionName并在母版页中填充ViewData?,asp.net-mvc,master-pages,Asp.net Mvc,Master Pages,我有一个超级控制器,它将从所有控制器继承。在构造函数中,我试图使用ControllerName和ActionName填充ViewData 我不会将ControllerName和ActionName作为ViewData传递。我有一个方法需要ControllerName和ActionName,我需要将该方法的返回值作为ViewData传递 我该怎么做呢?不要使用ViewData。在您的站点中使用此选项。请改为使用Master: <%= ViewContext.RouteData.Values[

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

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


我该怎么做呢?

不要使用
ViewData
。在您的站点中使用此选项。请改为使用Master:

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


假设我正确阅读了您的帖子,您没有尝试访问视图中的控制器/操作名称,而是尝试对其进行处理,并将结果放入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.RoutedData传递给您的函数,让它选择所需的值。)

我需要从视图中了解这些内容,我从稍微不同的角度对其进行了分析——我为HtmlHelper编写了一些扩展方法,以提供当前的ControllerName和ActionName。更容易处理,因为您无需担心潜入ViewData[]包或在适当的位置注射物品。

尝试以下方法:

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

我认为这种扩展方法更适合UrlHelper,而不是HtmlHelper。这两个值实际上与HTML无关。很好的一点——我认为实现甚至可能已经以这种方式进行了重构。这两种情况下的原理大致相同——将其拉出而不是推入。如果使用自定义路由(例如
语言/controller/action
controller
可能不是第一个条目。要获取操作,请查看控制器名称。这些名称将反映请求url的大小写。您对它们所做的操作不应区分大小写。(我掉进了那个陷阱。)