警报上的关闭按钮不能与Bootstrap& ASP.NET MVC

时间:2015-10-06 16:19:26

标签: jquery asp.net asp.net-mvc twitter-bootstrap

我正在尝试使用以下代码在我的MVC 5项目中工作:

<!-- for the snippet to work -->
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>


<p>This alert should close, when clicking the 'x'-button:</p>
<div class="alert alert-warning alert-dismissible fade in" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span>
  </button>
  <strong>Holy guacamole!</strong> Best check yo self, you're not looking too good.
</div>

我从official bootstrap site拿走了它。单击“x”按钮时,警报应关闭。正如您所看到的,它实际上在这个片段中工作正常。但是它不在我的应用程序中。警报根本不会关闭。显然,MVC框架必须以某种方式对此负责。

浏览器的调试控制台不显示任何错误消息。是的,我还在项目中包含了Bootstrap(3.5.5)和jQuery(2.1.4)的JS源代码 - 它们被正确加载并显示在浏览器调试视图中的“sources”下。

编辑:Aaron建议其他一些脚本可能会覆盖/隐藏引导程序代码。所以这些是我的项目目前使用的js库:

  • 的jquery-2.1.4.min.js
  • bootstrap.min.js
  • jquery.unobtrusive-ajax.min.js
  • 的jquery-UI-1.11.4.min.js
  • jquery.effects.highlight.min.js
  • jquery.effects.core.min.js
  • 加上其他一些用辅助方法写的助手js

它们的加载顺序与列出的顺序相同。省略以下库没有帮助:

  • 的jquery-UI-1.11.4.min.js
  • jquery.effects.highlight.min.js
  • jquery.effects.core.min.js

删除jquery.unobtrusive-ajax.min.js会导致我的应用程序“崩溃”,因为它无法再动态加载内容。

调用匿名函数声明后,当文档加载时( 之前警报已动态插入到html中):

Alert.prototype.close = function (e) {...}

单击“x”按钮似乎不会调用bootstrap.js中的任何代码,但也许我找不到正确放置断点的位置。

3 个答案:

答案 0 :(得分:0)

小提琴包括对我来说很好。我建议打开chrome开发人员工具(点击ctrl+shift+j)进行调试。

可能的问题:

你可以让代理/防火墙阻止CDN,这样你的JS就不会加载。这将显示在开发人员工具的网络选项卡中。尝试在本地加载bootstrap js文件。

或者,有一些冲突的javascript版本。您将在开发人员工具的控制台选项卡中看到一个错误。

答案 1 :(得分:0)

在您的评论中,您提到这些是您正在使用的库:

  • 的jquery-2.1.4.min.js

  • bootstrap.min.js

  • jquery.unobtrusive-ajax.min.js

  • 的jquery-UI-1.11.4.min.js

这也是他们加载的顺序吗?如果是这样,那么看起来close()可能会被jqueryUI中的close()覆盖,因为jqueryUI是在bootstrap之后加载的。

答案 2 :(得分:0)

我得到了它的工作,但我不太确定这个问题的实际原因是什么。这是我做的:

  1. 删除所有本地引导程序源(最初通过nuget下载)
  2. 改为使用远程资源(如代码段中所示)
  3. 之后警报按原样正常关闭。奇怪的是,如果我从nuget重新安装bootstrap源并使用它们而不是远程源,则不再出现问题。我提到的其他脚本似乎与bootstrap或jquery没有冲突,因为我还在使用它们。我也更改了加载顺序。

    我必须已经无意中损坏了本地引导程序源以前版本的bootstrap nuget包中一定存在错误。也许同一个bootstrap版本有不止一个包。我认为可以排除缓存问题,因为除了重新安装源代码之外我实际上没有改变任何内容。