Asp.net 当用户选择导航栏项目时,如何将其设置为活动?
我是一名新的ASP.NET Web表单开发人员,正在尝试将Twitter引导应用于母版页。当用户选择导航栏项目时,我正在努力将其设置为活动状态。我创建了一个简单的母版页,介绍了如何在ASP.NET中使用Twitter引导 以下是我的母版页的代码:Asp.net 当用户选择导航栏项目时,如何将其设置为活动?,asp.net,twitter-bootstrap,master-pages,navbar,Asp.net,Twitter Bootstrap,Master Pages,Navbar,我是一名新的ASP.NET Web表单开发人员,正在尝试将Twitter引导应用于母版页。当用户选择导航栏项目时,我正在努力将其设置为活动状态。我创建了一个简单的母版页,介绍了如何在ASP.NET中使用Twitter引导 以下是我的母版页的代码: <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> <!DOCTYPE html> <html xmlns
<%@ 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>
然后,我将此脚本添加到头部,以解决菜单问题:
<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>
$(文档).ready(函数(){
var url=window.location.pathname;
var substr=url.split('/');
var urlaspx=substr[substr.length-1];
$('.nav').find('.active').removeClass('active');
$('.nav li a')。每个(函数(){
如果(this.href.indexOf(urlaspx)>=0){
$(this.parent().addClass('active');
}
});
});
然而,一切都没有改变。当我从导航栏中选择任何项目时,活动类尚未添加到新选择的项目中,我不知道为什么您能帮我解决这个问题吗?我已经将它放在我的每个内容页面中,更改每个页面的导航项id(这使用JQuery选择器)。因此,要让它对您起作用,您需要为列表项提供一个Id。我不会将“active”类添加到母版页,因为我们需要做的只是在加载内容时突出显示相应的类
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("[id$=yourNavItemId]").addClass("active");
});
</script>
$(文档).ready(函数(){
$(“[id$=yourNavItemId]”)addClass(“活动”);
});
注意:如果您使用ASP.NET控件而不是导航栏中的列表项,则它们可能在运行时被加上前缀,导致javascript找不到您认为需要的Id 使用以下命令:
<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');
}
});
});
$(文档).ready(函数(){
var url=window.location;
$('.navbar.nav').find('.active').removeClass('active');
$('.navbar.nav li a')。每个(函数(){
如果(this.href==url){
$(this.parent().addClass('active');
}
});
});
例如:
并且,在“href”中使用“Page.ResolveUrl”
更好…事实上雷纳尔多差点就吃了。。。 至少对我来说,根据他的例子,激活当前选项和取消激活前一个选项都非常有效
$(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');
}
});
});
如果您正在使用带有下拉菜单的导航栏,请将下面的脚本放在母版页的末尾(正文结束标记之前):
$(文档).ready(函数(){
var url=window.location;
$('ul.nav li a')。每个(函数(){
如果(this.href==url){
$(“ul.nav li”)。每个(功能){
if($(this).hasClass(“活动”)){
$(此).removeClass(“活动”);
}
});
$(this.parent().parent().parent().addClass('active');
}
});
});
这对我来说完全有效。如果我有子页面,以下代码可以工作:
$(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');
});
我知道这篇文章很旧,但很有用
$(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');
}
});
});
由于您还希望激活所有父级。我创建了一个示例,完全满足您的要求,您需要根据需要修改代码。
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);
在母版页上使用此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>
$(函数(){
$('[id*=子菜单]).addClass('子菜单打开');
$('[id*=Master_Pages]')。attr(“aria扩展”,true);
$('.subMenus')。单击(函数(){
localStorage.setItem('lastTab',$(this.attr('id'));
});
});
函数pageLoad(){
var isActiveLink=错误;
$.each($('.subMenus'),函数(){
if($(this.attr('id')==localStorage.getItem('lastTab')){
$(this).closest('li').addClass('active');
localStorage.removietem('lastTab');
isActiveLink=true;
}
否则{
$(this).closest('li').removeClass('active');
}
});
如果(!isActiveLink){
$('[id*=Master_Designation]')。最近('li')。addClass('active');
}
}
对于像我这样喜欢服务器端实现的人,将感兴趣的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>
C#实施:
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
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”是最初应该打开的页面,“Home”菜单项将在用户进入网站时突出显示。下面显示了一个示例:
为了简单起见,示例中只使用了两个navbar项,但如果需要更多,则可以实现相同的逻辑
我希望能有所帮助。这项功能非常有效,无需使用本地存储!这个C#解决方案对我很有效,但是这行代码:“string thisURL=Request.Url.Segments(Request.Url.Segments.Count-1);有点不正确,它需要方括号而不是括号和长度属性(不是计数),比如:“string thisURL=Request.Url.Segments[Request.Url.Segments.Length-1];“这让我有点困惑。在这里找到了masoud Cheragee解释的正确语法:@Doreen,谢谢!我已经更新了原始答案中的代码。如果您添加解决方案的解释,那会更好,因此我们可以根据我们的要求进行编辑
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
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;
}
}
}