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
属性?