从剃刀获取控制器名称

我似乎很难得到一些应该很容易的东西。 在我看来,使用Razor,我想得到当前控制器的名称。 例如,如果我在这里:

http://www.example.com/MyController/Index 

如何从Razor表达式获取控制器名称MyController

 @* Obviously this next line doesn't work @Controller.Name *@ 

我是MVC的新手,所以如果这是一个明显的答案,请不要攻击我。

 @{ var controllerName = this.ViewContext.RouteData.Values["controller"].ToString(); } 

要么

 @{ var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString(); } 

Koti Panga答案的附录:他提供的两个例子并不等同。

 var controllerName = this.ViewContext.RouteData.Values["controller"].ToString(); 

这将返回处理执行此代码的视图的控制器的名称,而

 var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString(); 

这将返回URL中请求的控制器的名称。

虽然在大多数情况下这些肯定是相同的,但在某些情况下,您可能位于属于不同控制器的局部视图内,并希望在链中获得控制器的名称“更高级”,在这种情况下,第二种方法是必需的。

(抱歉将此作为单独的答案发布;我还没有声誉对他发表评论。)

 @HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString(); 

MVC 3

 @ViewContext.Controller.ValueProvider.GetValue("controller").RawValue 

MVC 4.5

 @ViewContext.RouteData.Values["controller"].ToString(); 

要删除需要ToString()调用使用

 @ViewContext.RouteData.GetRequiredString("controller") 

此外,如果您想获得完整控制器的名称(“Controller”结尾),您可以使用:

 ViewContext.Controller.GetType().Name 

@ ViewContext.RouteData.Values [ “控制器”]的ToString();