我似乎很难做到一件应该很容易的事情。从我的视角来看,使用Razor,我想获取当前控制器的名称。例如,如果我在这里:
http://www.example.com/MyController/Index
如何从 Razor 表达式中获取控制器名称 MyController
:
@* Obviously this next line doesn't work
@Controller.Name
*@
我对MVC不太熟悉,如果这是一个显而易见的答案,请不要攻击我。
我似乎很难做到一件应该很容易的事情。从我的视角来看,使用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 handlingController = this.ViewContext.RouteData.Values["controller"].ToString();
这将返回在URL中请求的控制器名称:
var requestedController = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
尽管这些在大多数情况下肯定是相同的,但有些情况下您可能处于属于另一个控制器的部分视图中,并且想要获取链中更高级别的控制器的名称,在这种情况下需要使用第二种方法。LayoutController
中的SiteMenuPartial
操作准备并传递给视图。/Home/Index
时,将检索布局页面,通过布局页面调用SiteMenuPartial
方法,并返回SiteMenuPartial.cshtml
部分视图。如果在该部分视图中执行以下两行代码,则会返回所示的值:/* Executes at the top of SiteMenuPartial.cshtml */
@{
// returns "Layout"
string handlingController = this.ViewContext.RouteData.Values["controller"].ToString();
// returns "Home"
string requestedController = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
}
@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
MVC 3
@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
MVC 4.5或MVC 5
@ViewContext.RouteData.Values["controller"].ToString();
ToString()
,可以使用以下方法:@ViewContext.RouteData.GetRequiredString("controller")
我想给之前的回答添加一些信息。也许有人需要。
为了在 Razor 视图引擎中找到 区域名称
、控制器名称
和 操作名称
,你可以使用:
@{
var areaName = ViewContext.RouteData.Values["area"].ToString();
var controllerName = ViewContext.RouteData.Values["controller"].ToString();
var actionName = ViewContext.RouteData.Values["action"].ToString();
}
如果您想获取完整的控制器名称(以“Controller”结尾),可以使用以下方法:
ViewContext.Controller.GetType().Name
@ViewContext.RouteData.Values["controller"].ToString();