我的最终目标是有一个菜单,将一个类添加到与我当前页面关联的列表项.
所以我设置它使每个控制器与我菜单中的项目相关联.我需要在该列表项中添加一个类(更改颜色,背景等).
有一个简单的方法吗?将值传递给View,然后是什么?
解决方法
在我最近的一个项目中,我使用
HtmlHelper扩展并从ViewContext.RouteData.Values集合中获取数据.
所以建立一个像这样的简单扩展:
public static string OnClass(this HtmlHelper html,bool isOn) { if (isOn) return " class=\"on\""; return string.Empty; }
您可以构建任意数量的组合,例如
只测试当前的操作:
public static string OnClass(this HtmlHelper html,string action) { string currentAction = html.ViewContext.RouteData.Values["action"].ToString(); return html.OnClass(currentAction.ToLower() == action.ToLower()); }
测试一系列动作:
public static string OnClass(this HtmlHelper html,string[] actions) { string currentAction = html.ViewContext.RouteData.Values["action"].ToString(); foreach (string action in actions) { if (currentAction.ToLower() == action.ToLower()) return html.OnClass(true); } return string.Empty; }
测试动作和控制器:
public static string OnClass(this HtmlHelper html,string action,string controller) { string currentController = html.ViewContext.RouteData.Values["controller"].ToString(); if (currentController.ToLower() == controller.ToLower()) return html.OnClass(action); return string.Empty; }
等等
然后你只需在你的视图中调用它
<ul id="left-menu"> <!-- simple boolean --> <li <%= Html.OnClass(something == somethingElse) %>>Blah</li> <!-- action --> <li <%= Html.OnClass("Index") %>>Blah</li> <!-- any number of actions --> <li <%= Html.OnClass(new string[] { "Index","Details","View" }) %>>Blah</li> <!-- action and controller --> <li <%= Html.OnClass("Index","Home") %>>Blah</li> </ul>
HtmlHelper扩展程序是你的朋友!