查看当前控制器

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

我通过 CategoryController重复使用 V/M作为:

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

如何从 View - _Edit内部提醒控制器名称?

当我:

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

值是: News 但是,网址是: /Category/foobar

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

115578 次浏览

我把这一点放在我的片面观点中:

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

在您描述的同一种情况下,它显示了在 URL 中描述的控制器(对于您来说是分类,对于我来说是 Product) ,而不是部分视图的实际位置。

因此,请使用以下提示:

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

即使从 Views/News文件夹加载 PartialView,您仍然处于 CategoryController的上下文中。

在视图中获取当前 Controller 名称的其他方法

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

我是这样做的:

@ViewContext.RouteData.Values["controller"]

为所有控制器创建基类,并将 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"; }
}

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

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

如果你正在使用 MVC 3,你可以使用

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

使用:

ViewContext.Controller.GetType().Name

这将给您提供控制器的全名

对于任何正在寻找 ASP.NET Core MVC的最新版本的人来说,你可以使用:

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