【发布时间】:2017-09-05 16:07:36
【问题描述】:
对 Bootstrap 感到很兴奋,我正在替换我们网站 MasterPage 中的菜单。我有一个很好的菜单可以在 test.aspx 页面中工作,但是当把它放在母版页中时,我发现小屏幕的汉堡图标没有显示下拉菜单。这是 Bootstrap 到 Asp.Net 组合的主要限制,还是我在这里做错了什么?
这里是仅包含基本版 Bootstrap 菜单的母版页:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage1.master.cs" Inherits="MasterPage1" %>
<!DOCTYPE html>
<html lang="nl">
<head>
<title>Test with Bootstrap menu</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<asp:ContentPlaceHolder ID="ContentPlaceHolder_Header" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div class="container-fluid">
<nav id="menu_projects">
<div class="navbar navbar-default">
<div id="menubar" class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div id="navbar" class="navbar-collapse collapse" runat="server">
<ul id="ul_menu" class="nav navbar-nav navbar-right" runat="server">
<li><a id="a_menu_1" href="#"></a>Menu 1</li>
<li><a id="a_menu_2" href="#"></a>Menu 2</li>
<li><a id="a_menu_3" href="#"></a>Menu 3</li>
<li><a id="a_menu_4" href="#"></a>Menu 4</li>
<li><a id="a_menu_5" href="#"></a>Menu 5</li>
<li><a id="a_menu_6" href="#"></a>Menu 6</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder_Body" runat="server">
</asp:ContentPlaceHolder>
</form>
</body>
</html>
这里是使用母版页的实际页面:
<%@ Page Title="" Language="C#" MasterPageFile="~/Dev/MasterPage1.master" AutoEventWireup="true" CodeFile="MP1_menu_test.aspx.cs" Inherits="Dev_MP1_menu_test" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder_Header" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder_Body" Runat="Server">
<h1>This is a test with master age</h1>
</asp:Content>
上述组合确实显示了菜单,但仅在大屏幕上显示。缩小屏幕时,汉堡图标替换菜单项,但汉堡不显示菜单项下拉列表。
我还在一个常规的、非母版页、aspx 页面中使用相同的引导菜单代码进行了测试,该页面运行完美,带有工作下拉菜单:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="NoMP_menu_test.aspx.cs" Inherits="Dev_NoMP_menu_test" %>
<!DOCTYPE html>
<html lang="nl">
<head>
<title>Test with Bootstrap menu</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<form id="form1" runat="server">
<div class="container-fluid">
<nav id="menu_projects">
<div class="navbar navbar-default">
<div id="menubar" class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div id="navbar" class="navbar-collapse collapse" runat="server">
<ul id="ul_menu" class="nav navbar-nav navbar-right" runat="server">
<li><a id="a_menu_1" href="#"></a>Menu 1</li>
<li><a id="a_menu_2" href="#"></a>Menu 2</li>
<li><a id="a_menu_3" href="#"></a>Menu 3</li>
<li><a id="a_menu_4" href="#"></a>Menu 4</li>
<li><a id="a_menu_5" href="#"></a>Menu 5</li>
<li><a id="a_menu_6" href="#"></a>Menu 6</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
<h1>Test without masterpage</h1>
</form>
</body>
</html>
对于所有文件,我将代码隐藏页面完全留空,只留下那些由 VisualStudio 创建的页面。
.Net 的版本是 3.5。
根据此测试,MasterPage 似乎破坏了 Bootstrap。但是我很难相信像 Bootstrap 这样有用的包不能与 Asp Masterpage 一起使用。
对于一个有几十页的网站,我该如何编写菜单栏?
评论者 Jason 是对的:MasterPage 中的 ID 值以 Asp 系统为前缀,带有 ctl100_ 之类的前缀,这肯定是 Bootstrap 中的 javascript 找不到这些的原因。
这是浏览器看到的相关部分:
<div class="navbar navbar-default">
<div id="menubar" class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div id="ctl00_navbar" class="navbar-collapse collapse">
<ul id="ctl00_ul_menu" class="nav navbar-nav navbar-right">
<li><a id="a_menu_1" href="#"></a>Menu 1</li>
<li><a id="a_menu_2" href="#"></a>Menu 2</li>
<li><a id="a_menu_3" href="#"></a>Menu 3</li>
<li><a id="a_menu_4" href="#"></a>Menu 4</li>
<li><a id="a_menu_5" href="#"></a>Menu 5</li>
<li><a id="a_menu_6" href="#"></a>Menu 6</li>
</ul>
</div>
</div>
</div>
IIS/ASP 将两个 ID 修改为 ctl100_navbar 和 ctl100_ul_menu。
我尝试将数据目标更改为 #ctl100_navbar,但这没有帮助。
如何解决这个问题?
【问题讨论】:
-
打开浏览器的 javascript 控制台,然后再次尝试单击汉堡菜单。观察控制台以查看是否有任何 javascript 错误。我使用 ASPX 已经很久了,但我相信 HTML 元素的 ID 或名称会动态更改,因此 javascript 无法找到它们。
-
@JasonRoner 试过了,没有错误。我将尝试比较Firefox中两个aspx页面的视图源以更改ID名称
-
尝试将任何 js 脚本从 移动到 之前的末尾
-
将 ClientIDMode 设置为静态 msdn.microsoft.com/en-us/library/…
-
@WithMetta 好提示!我必须将网站升级到 .Net 4,明天早上我会试试这个。
标签: c# asp.net twitter-bootstrap drop-down-menu master-pages