我想在我的母版页中设置一个CSS类,这取决于当前控制器和动作。我可以通过ViewContext.Controller.GetType()访问当前控制器。名称,但我如何得到当前的行动(如索引,显示等)?
当前回答
获取视图的当前Id:
ViewContext.RouteData.Values["id"].ToString()
获取当前控制器。
ViewContext.RouteData.Values["controller"].ToString()
其他回答
我知道这是一个老问题,但我看到了它,我认为您可能对一个替代版本感兴趣,而不是让您的视图处理检索它需要的数据。
在我看来,一个更简单的方法是重写onactionexecution方法。你被传递一个ActionExecutingContext,它包含ActionDescriptor成员,你可以用它来获取你正在寻找的信息,也就是ActionName,你也可以到达ControllerDescriptor,它包含ControllerName。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ActionDescriptor actionDescriptor = filterContext.ActionDescriptor;
string actionName = actionDescriptor.ActionName;
string controllerName = actionDescriptor.ControllerDescriptor.ControllerName;
// Now that you have the values, set them somewhere and pass them down with your ViewModel
// This will keep your view cleaner and the controller will take care of everything that the view needs to do it's job.
}
希望这能有所帮助。如果有什么不同的话,至少它会为其他问你问题的人提供一种选择。
我使用ASP。NET MVC 4,这是为我工作:
ControllerContext.Controller.ValueProvider.GetValue("controller").RawValue
ControllerContext.Controller.ValueProvider.GetValue("action").RawValue
在控制器中重写此函数
protected override void HandleUnknownAction(string actionName)
{ TempData["actionName"] = actionName;
View("urViewName").ExecuteResult(this.ControllerContext);
}
我投票给这个2:
string currentActionName = ViewContext.RouteData.GetRequiredString("action");
and
string currentViewName = ((WebFormView)ViewContext.View).ViewPath;
您可以检索当前视图的物理名称和触发该视图的操作。它可以在partial *中使用。Acmx页来确定主机容器。
获取视图的当前Id:
ViewContext.RouteData.Values["id"].ToString()
获取当前控制器。
ViewContext.RouteData.Values["controller"].ToString()