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


当前回答

我投票给这个2:

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

and

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

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

其他回答

我投票给这个2:

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

and

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

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

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

ViewData["CssClass"] = "bold";

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

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

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

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

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

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