获取当前控制器

时间:2011-07-28 00:47:39

标签: asp.net-mvc-3

我的View - _Edit住在News M/V/C

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

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

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

当我:

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

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

有没有办法让值'Category'提醒?感谢

8 个答案:

答案 0 :(得分:189)

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

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

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

所以请改用此提醒:

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

答案 1 :(得分:115)

我是这样做的,但也许它只是ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

答案 2 :(得分:21)

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

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

答案 3 :(得分:13)

在View

中获取当前Controller名称的其他方法
@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue

答案 4 :(得分:2)

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

答案 5 :(得分:2)

只需使用:

ViewContext.Controller.GetType().Name

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

答案 6 :(得分:0)

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

@ HttpContext.Current.Request.RequestContext.RouteData.Values ["控制器&#34]。的ToString();

如果您使用的是MVC 3,则可以使用 @ ViewContext.Controller.ValueProvider.GetValue("控制器&#34)。RawValue

答案 7 :(得分:0)

对于当今(最新版本)ASP.NET Core MVC 的任何人,您可以使用:

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