Asp.net mvc 3 获取视图中的当前控制器

Asp.net mvc 3 获取视图中的当前控制器,asp.net-mvc-3,Asp.net Mvc 3,我有一个视图-\u Edit,它位于新闻M/V/C中 我通过CategoryController重用V/M,如下所示: return PartialView("/Views/News/_Edit.cshtml", model); 如何在视图-\u Edit中提醒控制器名称 当我: alert('@ViewContext. RouteData.Values["controller"].ToString()'); 值为:News 但是,URL是:/Category/foobar 有没有办法让值'

我有一个
视图-\u Edit
,它位于
新闻M/V/C

我通过
CategoryController
重用
V/M
,如下所示:

return PartialView("/Views/News/_Edit.cshtml", model);
如何在
视图-\u Edit
中提醒控制器名称

当我:

alert('@ViewContext. RouteData.Values["controller"].ToString()');
值为:
News
但是,URL是:
/Category/foobar


有没有办法让值
'Category'
发出警报?谢谢

我把这一点放在了我的部分观点中:

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()
在您描述的相同情况下,它显示URL中描述的控制器(您的类别,我的产品),而不是局部视图的实际位置

因此,请改用此警报:

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

即使您正在从
视图/News
文件夹加载
部分视图,您仍处于
类别控制器的上下文中。

以其他方式查看当前控制器名称

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

我是这样做的,但可能只是ASP.NETMVC4

@ViewContext.RouteData.Values["controller"]

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

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"; } 
    }

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

@HttpContext.Current.Request.RequestContext.routedData.Values[“controller”].ToString();
如果您使用的是MVC3,则可以使用

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
只需使用:

ViewContext.Controller.GetType().Name

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

对于现在(最新版本)寻找此
ASP.NET Core MVC的任何人,您可以使用:

@Context.Request.RouteValues["controller"].ToString()

你没有
新闻控制器
?请发布你的操作
方法
来加载
部分视图
,以及
方法
存在的
控制器
。下面由帕尔皮给出的答案是一个(更容易记住的)快捷方式:
@ViewContext.RouteData.Values[“controller”
仅供参考,您不需要获取
HttpContext.Current
<代码>请求
直接可用。是否可以获取包含命名空间的完整控制器类名?另外,如果您需要操作方法的名称,也可以显示view name.btw,
[“action”]
工作。请记住,您的解决方案将返回当前正在执行的控制器。因此,如果浏览器请求ControllerA,并且ControllerA从ControllerB呈现部分视图,则您的解决方案将返回ControllerB的名称,而Nicholas Sizer解决方案将返回ControllerA的名称。这应被视为最佳答案。这在ASP.NET Core 2.2中仍然有效。请解释如何设置
Name
属性?