我有母版页,在其底部我有这样的菜单:
<div class="footMenu">
<ul>
<li class="active"><a href="">test1</a> </li>
<li><a href="">test2</a></li>
<li><a href="">test3</a></li>
</ul>
</div>
根据加载的视图,我需要将class="active"
放在当前li项目之前。
如何做到这一点?
答案 0 :(得分:1)
在asp.net mvc应用程序中,我通常通过设置body标记的id来解决这个问题,该标记包含控制器的名称和操作的名称。然后我根据body标签的id使用css来设置链接的样式。
我通常通过创建一个html帮助扩展来获取body标记的id字符串。这看起来像这样:
public static string BodyId(this HtmlHelper helper) {
var controllerName = helper.ViewContext.RouteData.GetRequiredString("controller").ToLower();
var actionName = helper.ViewContext.RouteData.GetRequiredString("action").ToLower();
return string.Format("{0}-{1}", controllerName, actionName);
}
然后像这样使用它:
<body id="<%=Html.BodyId()%>">
然后你也可以把你所有链接的ID。为了更清楚,它们还可以包含控制器的名称以及它们应链接到的操作的名称。像这样:
<ul>
<li><a href="" id="home-index-link">test1</a></li>
<li><a href="" id="account-login-link">test2</a></li>
</ul>
然后我使用css对它们进行不同的样式设置,具体取决于它们是否被选中。像这样:
#home-index #home-index-link, #account-login #account-login-link {
/* Styles for selected links */
}
当然,如果您对<li />
标记而不是<a />
标记执行相同的操作,那么它将起作用。
如果您不想这样做,您当然可以使用routedata(就像我在我的html助手中所做的那样)。键“action”的值将包含操作的名称,键“controller”的值将包含控制器的名称。