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

时间:2015-02-17 09:30:38

标签: c# asp.net-mvc-4

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

@Html.Action("Menu","Site", new { calledForController = "Organization", oId = @Model.Id })

一切都很顺利,但我遇到的问题是因为我有更多的观点,所以我必须在每个视图中加上上面的一行。我正在寻找的是从路由数据中获取当前控制器和操作名称的方法,这样我就不必在每个视图上调用它。

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

@Html.Action("Menu","Site")

在我的_Layout.cshtml中,然后在菜单控制器中填充菜单列表,具体取决于调用它的位置。

如果我写

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

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

1 个答案:

答案 0 :(得分:1)

我已经搜索过,发现这是一个适合我的解决方案,让路由数据使用这个

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

if (routeValues.ContainsKey("id"))
   oId = (String)routeValues["id"];

这种方式在我的_Layout.cshtml中我可以写这个

@Html.Action("Menu","Site")

现在我不必一次又一次地传递额外的控制器。