从剃刀获取控制器名称
我似乎很难得到一些应该很容易的东西。 在我看来,使用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();