C# 在asp.net mvc中获取控制器名称

C# 在asp.net mvc中获取控制器名称,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,在我的应用程序中,我正在创建一个动态菜单。根据调用的控制器填充菜单。例如,在我的一个控制器中,名称是Organization。要填充它的菜单,我称之为 @Html.Action("Menu","Site", new { calledForController = "Organization", oId = @Model.Id }) 一切都很顺利,但我遇到的问题是,当我有更多的观点时,我必须在每个观点中都放上这条线。我要寻找的是一种从路由数据中获取当前控制器和操作名称的方法,这样我就不必在每个视

在我的应用程序中,我正在创建一个动态菜单。根据调用的控制器填充菜单。例如,在我的一个控制器中,名称是Organization。要填充它的菜单,我称之为

@Html.Action("Menu","Site", new { calledForController = "Organization", oId = @Model.Id })
一切都很顺利,但我遇到的问题是,当我有更多的观点时,我必须在每个观点中都放上这条线。我要寻找的是一种从路由数据中获取当前控制器和操作名称的方法,这样我就不必在每个视图上调用它

理想的解决方案是写这样的东西

@Html.Action("Menu","Site")
在my_Layout.cshtml中,然后在菜单控制器中,根据调用位置填充菜单列表

如果我写

this.ControllerContext.RouteData.Values["controller"].ToString();

在站点控制器的菜单操作中,我总是将站点作为控制器名称。有什么想法吗

我已经搜索并发现这是一个适合我的解决方案,使用此

var routeValues = HttpContext.Request.RequestContext.RouteData.Values;

if (routeValues.ContainsKey("id"))
   oId = (String)routeValues["id"];
这样我就可以在my_Layout.cshtml中编写

@Html.Action("Menu","Site")
现在我不必一次又一次地为控制器传递额外的呼叫