在默认的asp.net mvc项目中,在Site.Master文件中,有一个菜单导航列表:
<div id="menucontainer"> <ul id="menu"> <li><%= Html.ActionLink("Home","Index","Home")%></li> <li><%= Html.ActionLink("About Us","About","Home")%></li> </ul> </div>
这将在浏览器中呈现:
<div id="menucontainer"> <ul id="menu"> <li><a href="/">Home</a></li> <li><a href="/Home/About">About Us</a></li> </ul> </div>
我想能够基于被调用的视图动态设置活动列表项。也就是说,当用户正在查看主页时,我想要创建以下HTML:
<div id="menucontainer"> <ul id="menu"> <li class="active"><a href="/">Home</a></li> <li><a href="/Home/About">About Us</a></li> </ul> </div>
我希望做到这一点的方式是:
<div id="menucontainer"> <ul id="menu"> <li <% if(actionName == "Index"){%> class="active"<%}%>><%= Html.ActionLink("Home","Home")%></li> <li <% if(actionName == "About"){%> class="active"<%}%>><%= Html.ActionLink("About Us","Home")%></li> </ul> </div>
这里的关键是<%if(actionName ==“Index”){%> class =“active”<%}%>线。我不知道如何确定当前actionName是什么。
解决方法
我自己做了一个帮助方法来处理这种类型的事情。在我的主页的代码(可以推到一个扩展方法…可能是一个更好的方法),我把以下代码。
protected string ActiveActionLinkHelper(string linkText,string actionName,string controlName,string activeClassName) { if (ViewContext.RouteData.Values["action"].ToString() == actionName && ViewContext.RouteData.Values["controller"].ToString() == controlName) return Html.ActionLink(linkText,actionName,controlName,new { Class = activeClassName }); return Html.ActionLink(linkText,controlName); }
<%= ActiveActionLinkHelper("Home","Home","selected")%>