使用母版页时的活动元素

时间:2014-07-02 12:45:23

标签: javascript html asp.net

如果我设置Master page以显示类似于以下内容的标题

<ul class="nav nav-pills nav-main" id="mainMenu">
    <li>
        <a class="dropdown-toggle" href="default.aspx">Home</a>
    </li>
    <li>
        <a href="aboutus.aspx">About Us</a>
    </li>
</ul>

我想为用户所在的当前页面设置活动元素,因此在html中,如果default.aspx是活动页面,它将如下所示。

<ul class="nav nav-pills nav-main" id="mainMenu">
    <li class="dropdown active"> <%--active--%>
        <a class="dropdown-toggle" href="default.aspx">Home</a>
    </li>
    <li>
        <a href="aboutus.aspx">About Us</a>
    </li>
</ul>

标题菜单基于现有模板,因此所有html都具有CSS样式,并且不包含任何asp:控件。我知道我可以通过设置属性在代码隐藏中执行此操作,但我提到的大部分搜索都说可能有更好的方法或者这是一个肮脏的解决方法link1&amp; link2

这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

首先,您必须将所有li标记设置为服务器控件

   <ul class="nav nav-pills nav-main" id="mainMenu">
    <li>
        <a class="dropdown-toggle" href="default.aspx" runat="server" id="lidefault">Home</a>
    </li>
    <li>
        <a href="aboutus.aspx" runat="server" id="liabout">About Us</a>
    </li>
</ul>

对所有li标签都做如上所述

然后在母版加载中,

string sURL=Request.Url.ToString().ToLower();
if (sURL.Contains("/default.aspx")
 lidefault.Attributes.Add("class", "active")
else if (sURL.Contains("/about.aspx")
 liabout.Attributes.Add("class", "active")
// do like the above for the rest li tags

答案 1 :(得分:1)

您可以使用javascript进行检查。设置foreach循环以检查菜单的每个链接。如果您的菜单url等于页面url,请使用.addClass()方法添加活动类。