我的最终目标是设置一个菜单,将一个类添加到与我当前页面关联的列表项中。
所以我进行了设置,使每个控制器与菜单中的项目相关联。我需要在该列表项中添加一个类(更改颜色,背景等)。
有一种简单的方法吗?将值传递给View,然后是什么?
答案 0 :(得分:12)
在我最近的一个项目中,我使用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;
}
Etc等。
然后你只需在你的视图中调用它
<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扩展是你的朋友! : - )
HTHS
查尔斯