我有一个SuperController
,它将从所有控制器继承。在构造函数中,我正在尝试使用 ControllerName和ActionName填充ViewData 。
我不打算将ControllerName和ActionName作为ViewData传递。我有一个需要ControllerName和ActionName的方法,我需要将方法的返回值作为ViewData传递。
我该怎么做?
答案 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 []包或在适当的地方注入东西。