带有选定类的简单asp.net webforms ul li菜单

时间:2011-07-18 19:49:40

标签: asp.net

我有一个简单的无序列表,其中包含链接。

<body>
    <div id="topMenu">
        <ul>
            <li><a class="selected" href="../Default.aspx">Start</a></li>
            <li><a href="../Category/ShowAll.aspx">Categories</a></li>
            <li><a href="../Elements/ShowAll.aspx">Elements</a></li>
            <li><a href="../Articles/ShowAll.aspx">Articles</a></li>
        </ul>
    </div>
    <asp:ContentPlaceHolder ID="MainContentPlaceholder" runat="server">
    </asp:ContentPlaceHolder>
</body>

我想更改链接的类,我点击“选定”类,这是最简单的方法。我想把它变成链接按钮并在会话中保存信息,但这看起来有点过分,必须有一个更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

好吧,您可以将<a>设为runat="server",然后从代码隐藏中访问它们:

hyperLink.Attributes["class"] = "opened";

您可以在主页中使用菜单进行此操作,并且您可以让您的子页面发送他们需要选择的超链接的ID,例如

在您的主人(linkWrapper可以是您的<ul> runat server)中:

(HyperLink)linkWrapper.FindControl(childPageMenuAnchorLinkId);

在你的孩子身上:

masterPage.ChildPageMenuAnchorLinkId = "link_Customers";

答案 1 :(得分:0)

如果您使用的是jQuery,那么来自其他SO问题的链接可能会帮助您解决问题。

jQuery add class .active on menu

修改
根据OP的使用,更正了使用“已选择”类的脚本,而不是“有效”。

所以,如果我从另一个答案“借用”脚本,我相信如果你使用jQuery,这将再次起作用......

$(function(){
    var url = window.location.pathname, 
        urlRegExp = new RegExp(url.replace(/\/$/,'') + "$"); // create regexp to match current url pathname and remove trailing slash if present as it could collide with the link in navigation in case trailing slash wasn't present there
        // now grab every link from the navigation
        $('#topMenu ul li a').each(function(){
            // and test its normalized href against the url pathname regexp
            if(urlRegExp.test(this.href.replace(/\/$/,''))){
                $(this).addClass('selected');
            }
        });
});