【发布时间】:2019-01-23 20:33:47
【问题描述】:
我有一个使用 Masterpages 的 ASP.NET 网站,并且正在从特定的子文件夹加载一些页面。 使用 Bootstrap 4.0 一切正常。
但是现在,使用 Bootstrap 4.2.1,当我跳转到这些页面之一时,包含使用 class="nav-link dropdown-toogle" 的子菜单的 NavBar 选项被破坏。
当我将鼠标放在下拉菜单上时,下方没有出现任何选项(相关菜单未加载/显示)。
我调查了它发生的原因,我看到 HREF(如果最初指向 #)现在显示“../#”,Chrome 发送以下消息:
未捕获的 DOMException:无法执行“querySelector” “文档”:“../#”不是有效的选择器。
剩下的代码都是一样的。
代码如下:
<li Class="nav-item dropdown">
<a runat="server" Class="nav-link dropdown-toggle" href="#" id="AdmFuncs" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Arquivos</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown" >
<a class="dropdown-item" href="/AdminActions/Categorias.aspx">Categorias</a>
<a class="dropdown-item" href="/AdminActions/Fabricantes.aspx">Fabricantes</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/AdminActions/Recepcao.aspx">E-mail Receptor</a>
</div>
</li>
当我转到子文件夹页面时,代码如下所示:
<li Class="nav-item dropdown">
<a runat="server" Class="nav-link dropdown-toggle" href="../#"
HREF 中 ../# 上方的注意事项
有趣的是:
- 未使用任何下拉选项的命令选项具有 HREF="../" 但 Bootstrap 正常理解它们。
- 具有下拉选项的命令选项(如上),具有 HREF="../#"(而只是 "#")并且 Bootstrap 向 DOM 发送错误并且不打开相关菜单。
有什么技巧可以解决吗? 我提前感谢。
更新
与支持人员交谈,他们建议使用data-target=#,甚至将ID 放入dropdown-toogle 类控件并使用data-target 引用它。
根本没有成功。 看到 DOM,我可以看到,当内容页面被加载(并且它位于子文件夹中)时,HREF 发生变化并且似乎使 Bootstrap 瘫痪......
更新-2
我做了一个测试,将所有页面从子文件夹移动到主文件夹(客户不接受的解决方案),一切都像一个魅力。该问题与 Bootstrap 4.2.1 + ASP Materpages + 子文件夹中的页面有关。
按照下面的建议,我将 HREF=# 取下来尝试...完全没有成功。
更新-3
Siava 建议删除 runat=server 并更改一些链接,以确保他在那里模拟问题作为解决方案。但是,不幸的是,我得到了以下结果:
您可以在上面看到 HREF 的问题已经消失,但问题仍然存在。
如果我们分析 Chrome 的错误,我们会看到:
如果您遇到并解决了这个问题,我将不胜感激。
拥抱!
【问题讨论】:
-
试试 Bootstrap 3?
-
Bootstrap 4.0 运行良好...我认为没有理由降级到 3。
-
我不确定是否有任何更新版本的 ASPNET,但大多数版本的模板都针对 Bootstrap 3。众所周知,Bootstrap 4 会破坏导航。使用 Nuget 很容易降级到 v3,如果可以排除,可以再次改回 4。
-
我无法复制该问题。如果我将
../#添加到<li class="nav-item dropdown">的第一个链接,它仍然有效。即使我在我自己的代码中使用下拉菜单添加您的li,它仍然有效。这表明其他一些 javascript 代码正在搞砸。如果重命名id="AdmFuncs"会发生什么?我用v4.1.3 -
@DavidBS 我删除了我的答案,以便有人可以提供更准确的信息
标签: asp.net bootstrap-4