13

我是一名新的 ASP.NET Web 窗体开发人员,并尝试将 Twitter Bootstrap 与母版页一起使用。当用户选择它时,我正在努力将导航栏项目设置为活动状态。我按照这篇关于如何在 ASP.NET 中使用 Twitter Bootstrap 的教程创建了我的简单母版页。

这是我的母版页的代码:

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <link href="css/bootstrap.css" rel="stylesheet" type="text/css" />

    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <div class="container">
            <div class="row-fluid">
                <div class="span12">
                    <div class="page-header">
                        <h1>Hello... My First Website with Twitter Bootstrap</h1>
                    </div>
                </div>
            </div>
            <div class="row-fluid">
                <div class="span3">
                    <ul class="nav nav-list">
                        <li class="nav-header">Navigation</li>
                        <li class="active"><a href="Default.aspx">ASP.NET</a></li>
                        <li><a href="Default2.aspx">Java</a></li>
                        <li><a href="#">VB.Net</a></li>
                        <li><a href="#">C#</a></li>
                    </ul> 
                </div>
                <div class="span9">
                    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

        </asp:ContentPlaceHolder>
                </div>
            </div>
        </div>

    </div>
    </form>
</body>
</html>

然后,我将此脚本添加到Head以解决菜单问题:

<script type="text/javascript">
    $(document).ready(function () {
        var url = window.location.pathname;
        var substr = url.split('/');
        var urlaspx = substr[substr.length - 1];
        $('.nav').find('.active').removeClass('active');
        $('.nav li a').each(function () {
            if (this.href.indexOf(urlaspx) >= 0) {
                $(this).parent().addClass('active');
            }
        });
    });
</script>

然而,一切都没有改变。当我从导航栏中选择任何项目时,活动类尚未添加到新的选定项目中,我不知道为什么。你能帮我解决这个问题吗?

4

9 回答 9

25

用这个:

<div class="navbar">
    <div class="navbar-inner">
        <div class="container">
            <ul class="nav">
                <li class="active"><a href="/Default.aspx">Default</a></li>
                <li><a href="/Clients.aspx">Clients</a></li>
                <li><a href="/_display/">Display</a></li>
            </ul>
        </div>
    </div>
</div>

$(document).ready(function () {
        var url = window.location;
        $('.navbar .nav').find('.active').removeClass('active');
        $('.navbar .nav li a').each(function () {
            if (this.href == url) {
                $(this).parent().addClass('active');
            }
        }); 
    });

示例:http: //jsfiddle.net/yUdZx/3/

并且,在“href”中使用“Page.ResolveUrl”

<a href="<%= Page.ResolveUrl("~/Clients.aspx") %>">Clients</a>

最好...

于 2013-10-11T04:46:34.153 回答
4

实际上,Reynaldo,几乎拥有它......至少对我来说,根据他的例子,这在激活当前选项和停用前一个选项时效果很好。

$(document).ready(function() {
    var url = window.location;                
    $('ul.nav li a').each(function () {
         if (this.href == url) {
              $("ul.nav li").each(function () {
                   if ($(this).hasClass("active")) {
                        $(this).removeClass("active");
                   }
              });
              $(this).parent().addClass('active');
         }
    });
});
于 2014-07-09T06:58:20.893 回答
2

对于像我这样喜欢服务器端实现的人,请将您感兴趣的li标签转换为 Master.Page 文件上的runat="server" 。有问题的代码将类似于以下内容:

 <div class="collapse navbar-collapse" id="menu">
                <ul class="nav navbar-nav ml-auto">
                    <li class="nav-item" runat="server" id="tabHome" >
                        <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
                    </li>
                    <li class="nav-item" runat="server" id="tabContact">
                        <a class="nav-link" href="/Contact">Contact</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" runat="server">Hello, <asp:LoginName runat="server" />
                        </a>
                    </li>
                </ul>
            </div>

然后在母版页后面的代码中 - Site.Master.vb 或 Site.Master.cs,取决于所使用的语言 - 在页面加载事件中添加以下内容:

VB.Net 实现:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim thisURL As String = Request.Url.Segments(Request.Url.Segments.Count - 1)

    Select Case thisURL
        Case "Default", "default.aspx"  
            tabContact.Attributes.Remove("active")
            tabHome.Attributes.Add("class", "active")
        Case "Contact"
            tabHome.Attributes.Remove("active")
            tabContact.Attributes.Add("class", "active")
    End Select
End Sub

C#实现:

Protected void Page_Load(Object sender, EventArgs e)
  {
    string thisURL = Request.Url.Segments[Request.Url.Segments.Length - 1];

    switch (thisURL)
    {
        Case "Default":
        Case "default.aspx": 
            {
                tabContact.Attributes.Remove("active");
                tabHome.Attributes.Add("class", "active");
                break;
            }

        Case "Contact" : 
            {
                tabHome.Attributes.Remove("active");
                tabContact.Attributes.Add("class", "active");
                break;
            }
    }
}

由于最初应该打开的页面是“Default.aspx”,因此一旦用户进入网站,“主页”菜单项就会突出显示。下面显示了一个示例:

在此处输入图像描述

为简单起见,示例中仅使用了两个导航栏项,但如果需要更多,可以实现相同的逻辑。

我希望能有所帮助。

于 2018-08-01T20:50:51.907 回答
1

我已将其放置在我的每个内容页面中,更改了每个页面的导航项的 id(这使用 JQuery 选择器)。因此,要为您工作,您需要为您的列表项提供一个 ID。我没有将“活动”类添加到母版页,因为我们需要做的就是在内容加载时突出显示适当的类。

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $("[id$=yourNavItemId]").addClass("active");
    });
</script>

注意:如果您在导航栏中使用 ASP.NET 控件而不是列表项,则它们可能会在运行时添加前缀,导致您的 javascript 找不到您认为正在寻找的 Id。

于 2013-08-01T16:14:13.003 回答
1

如果我有子页面,则以下代码有效:

 $(document).ready(function () {

        $('.navbar .nav').find('.active').removeClass('active');

        var url = window.location.toString();
        var u = url.substring(0, url.lastIndexOf("/")).toString();

        $('.navbar .nav li a').each(function () {

            var hr = this.href.substring(0, this.href.lastIndexOf('/')).toString();

            if ((u == hr) || (u.indexOf(hr) > -1))
            {
                $(this).parent().addClass('active');
                return false;
            }
        });
        // Deactivation to manually add items you have with href = "#" example:
        $('#liSalir').removeClass('active');
});
于 2016-07-26T18:35:18.847 回答
0

如果您使用带有下拉菜单的导航栏,则将以下脚本放在母版页的末尾(在正文结束标记之前):

<script type="text/javascript">
$(document).ready(function () {
    var url = window.location;
    $('ul.nav li a').each(function () {
        if (this.href == url) {
            $("ul.nav li").each(function () {
                if ($(this).hasClass("active")) {
                    $(this).removeClass("active");
                }
            });
            $(this).parent().parent().parent().addClass('active');
        }
    });
});
</script>

这对我完全有用。

于 2015-08-22T10:10:42.723 回答
0

我知道这篇文章很旧,但使用

    $(document).ready(function () {

    var url = window.location;
    $('ul.nav li a').each(function () {
        if (this.href == url) {
            $("ul.nav li").each(function () {
                if ($(this).hasClass("active")) {
                    $(this).removeClass("active");
                }
            });
            $(this).parents().addClass('active');
        }

    });

});

既然你也想激活所有的父母。

于 2017-01-12T12:38:00.443 回答
0
var windowUrl = window.location.href.toLowerCase();
//var windowUrl = window.location.href.toLowerCase().split('.')[0];
setTimeout(function () {
    var windowUrl = window.location.href.toLowerCase();
    $('#nav li').removeClass('active');
    $('#nav li').each(function (index) {
        pageUrl = $(this).find('a').attr('href');
        if (windowUrl.indexOf(pageUrl) > -1) {
            $(this).addClass('active');
        }
    });
}, 10);
于 2017-07-25T13:23:46.953 回答
0

我创建了一个示例,它完全满足您的要求,您需要根据需要修改代码。在母版页上使用此 jquery

 <script type="text/javascript">
        $(function () {
            $('[id*=submenu]').addClass('sub-menu open');
            $('[id*=Master_Pages]').attr("aria-expanded", true);

            $('.subMenus').click(function () {
                localStorage.setItem('lastTab', $(this).attr('id'));
            });
        });
        function pageLoad() {
            var isActiveLink = false;
            $.each($('.subMenus'), function () {
                if ($(this).attr('id') == localStorage.getItem('lastTab')) {
                    $(this).closest('li').addClass('active');
                    localStorage.removeItem('lastTab');
                    isActiveLink = true;
                }
                else {
                    $(this).closest('li').removeClass('active');
                }
            });
            if (!isActiveLink) {
                $('[id*=Master_Designation]').closest('li').addClass('active');
            }
        }
    </script>
于 2018-03-23T07:47:01.123 回答