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


当前回答

在控制器中重写此函数

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

其他回答

在MVC中,你应该为视图提供所有的数据,而不是让视图收集自己的数据,所以你能做的就是在你的控制器动作中设置CSS类。

ViewData["CssClass"] = "bold";

并从视图中的ViewData中选取这个值

获取视图的当前Id:

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

获取当前控制器。

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

使用ViewContext并查看RouteData集合以提取控制器和操作元素。但是我认为设置一些数据变量来指示应用程序上下文(例如,“editmode”或“error”)而不是控制器/动作减少了视图和控制器之间的耦合。

在控制器中重写此函数

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

在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"]