我想在我的母版页中设置一个CSS类,这取决于当前控制器和动作。我可以通过ViewContext.Controller.GetType()访问当前控制器。名称,但我如何得到当前的行动(如索引,显示等)?


当前回答

在控制器中重写此函数

protected override void HandleUnknownAction(string actionName) 
{  TempData["actionName"] = actionName;
   View("urViewName").ExecuteResult(this.ControllerContext);
}

其他回答

你可以从ViewContext的RouteData中获取这些数据

ViewContext.RouteData.Values["controller"]
ViewContext.RouteData.Values["action"]

在RC中,你也可以提取路由数据,比如action方法名

ViewContext.Controller.ValueProvider["action"].RawValue
ViewContext.Controller.ValueProvider["controller"].RawValue
ViewContext.Controller.ValueProvider["id"].RawValue

针对MVC 3的更新

ViewContext.Controller.ValueProvider.GetValue("action").RawValue
ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
ViewContext.Controller.ValueProvider.GetValue("id").RawValue

针对MVC 4的更新

ViewContext.Controller.RouteData.Values["action"]
ViewContext.Controller.RouteData.Values["controller"]
ViewContext.Controller.RouteData.Values["id"]

MVC 4.5更新

ViewContext.RouteData.Values["action"]
ViewContext.RouteData.Values["controller"]
ViewContext.RouteData.Values["id"]

我使用ASP。NET MVC 4,这是为我工作:

ControllerContext.Controller.ValueProvider.GetValue("controller").RawValue
ControllerContext.Controller.ValueProvider.GetValue("action").RawValue

获取视图的当前Id:

ViewContext.RouteData.Values["id"].ToString()

获取当前控制器。

ViewContext.RouteData.Values["controller"].ToString() 

我投票给这个2:

string currentActionName = ViewContext.RouteData.GetRequiredString("action");

and

string currentViewName = ((WebFormView)ViewContext.View).ViewPath;

您可以检索当前视图的物理名称和触发该视图的操作。它可以在partial *中使用。Acmx页来确定主机容器。