查看当前控制器


127

我有一个View - _Edit住在News M/V/C

V/M通过CategoryControlleras 重用了:

return PartialView("/Views/News/_Edit.cshtml", model);

如何从内部发出View - _Edit控制器名称警报?

当我:

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

值是:News 但是,URL是:/Category/foobar

有没有一种方法可以使价值'Category'警报?谢谢


你没有NewsController
猎人

请发布您method正在加载的动作partialview以及controller其中method存在的内容
猎人

Answers:


193

我将其放在我的部分观点中:

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

在与您描述的情况相同的情况下,它会显示URL中描述的控制器(代表您的类别,代表我的产品),而不是部分视图的实际位置。

因此,请改用以下警报:

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

25
Palpie的以下答案是(更容易记住)捷径:@ViewContext.RouteData.Values["controller"]
Laoujin

6
只是一个骗子,你不需要得到HttpContext.CurrentRequest直接可用。
Serj Sagan 2013年

是否可以获得完整的控制器类名称,包括名称空间?也可以显示视图名称也很酷。
Johncl

3
btw,["action"]如果您想要操作方法的名称,则可以使用。
Zapnologica

117

我这样做,但也许只有ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
请记住,您的解决方案将返回当前正在执行的控制器。因此,如果浏览器请求ControllerA,并且ControllerA从ControllerB渲染部分视图,则您的解决方案将返回ControllerB的名称,而Nicholas Sizer解决方案将返回ControllerA的名称。
Thomas CG de Vilhena 2014年

应该被认为是最佳答案。这在ASP.NET Core 2.2中仍然有效
汤姆(Tom)

21

为所有控制器创建基类,并将name属性放在此处:

public abstract class MyBaseController : Controller
{
    public abstract string Name { get; }
}

视野中

@{
    var controller = ViewContext.Controller as MyBaseController;
    if (controller != null)
    {
       @controller.Name
    }
}

控制器实例

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }

请说明如何设置Name属性?
ErikE


5

只需使用:

ViewContext.Controller.GetType().Name

这将为您提供整个控制器的名称


2

CategoryController即使您正在PartialViewViews/News文件夹中加载,也仍然处于上下文中。


0

您可以使用以下任何代码获取控制器名称

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

如果您使用的是MVC 3,则可以使用

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.