获取 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/action
)controller
可能不是第一个条目。【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章