正在从剃须刀中获取控制器名称
本文关键字:控制器 获取 剃须刀 | 更新日期: 2023-09-27 18:26:46
我似乎很难获得本应轻松的东西。在我看来,使用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")
如果您想获得完整的控制器名称(以"controller"结尾),您可以使用:
ViewContext.Controller.GetType().Name
我想在前面的答案中添加更多信息。也许有人需要。
为了在剃刀视图引擎中找到Area Name
、Controller Name
和Action Name
,您可以使用:
@{
var areaName = ViewContext.RouteData.Values["area"].ToString();
var controllerName = ViewContext.RouteData.Values["controller"].ToString();
var actionName = ViewContext.RouteData.Values["action"].ToString();
}
@ViewContext.RouteData.Values["controller"].ToString();