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

时间:2009-07-31 13:05:38

标签: asp.net-mvc master-pages

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

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

我该怎么做?

4 个答案:

答案 0 :(得分:63)

请勿使用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

答案 1 :(得分:6)

试试这个:

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

答案 2 :(得分: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传递给您的函数,然后让它选择所需的值。)

答案 3 :(得分:1)

我需要从视图中获取这些很多,我从一个稍微不同的角度来看它 - 我给HtmlHelper写了一些扩展方法来给出当前的ControllerName和ActionName。更容易处理,因为您不必担心潜入ViewData []包或在适当的地方注入东西。