Bootstrap JavaScript适用于localhost,但不适用于webhost

Set*_* IK 1 asp.net-mvc-4 twitter-bootstrap

我正在使用Twitter Bootstrap使用Buget安装到ASP.NET MVC应用程序.然而,我很惊讶地发现我曾经在localhost上工作的所有引导程序JavaScript,实际上在上传到我的网络托管服务提供商时仍然停止工作.

我完全被这个碰到了,我似乎无法弄清楚出了什么问题.

ngm*_*ngm 9

在加载jQuery之前,一些依赖于jQuery的脚本被包含在内.

  • bootstrap-dropdown.js包含在jQuery之前
  • 第75行的自定义javascript包含在jQuery之前

我建议搬家

<script src="/Scripts/bootstrap.js" type="text/javascript"></script>
<script type="text/javascript" src="http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js"></script>
Run Code Online (Sandbox Code Playgroud)

和你的自定义javascript从第75行到你的页面底部,包含jQuery包之后.或者将您的jQuery包移动到您的<head>.这是你的偏好 - 看到这个问题:Jquery代码应该在页眉还是页脚?关于那个特定问题......

你说它在你的本地盒子而不是在远程服务器上工作 - 如果确实如此,我最好的猜测是,这与捆绑/缩小的工作方式不同,具体取决于你是处于调试模式还是发布模式.


更新 基本上,在调试版本中,不会对脚本和css执行捆绑/缩小.每次<link><script>你在你的包引用将作为一个单独的文件,提供给他们任何转换.在发布版本中,捆绑中的文件将连接在一起成为一个文件,并将缩小等转换应用于它们.根据您的评论,为了在本地和发布的网站中获得调试行为,我看到3个选项:

1.在发布版本中,在web.config中将编译调试标志设置为true.

<system.web>
    <compilation debug="true" />
    <!-- Lines removed for clarity. -->
</system.web>
Run Code Online (Sandbox Code Playgroud)

我不特别推荐这个,因为你的发布版本通常不会被标记为调试.但这是一个有用的设置,可以快速切换您的发布版本,以检查您的javascript/css在关闭时是否正常工作.

2.在代码中,关闭捆绑表中的捆绑优化.

public static void RegisterBundles(BundleCollection bundles)
{
    // other code...
    BundleTable.EnableOptimizations = false;
}
Run Code Online (Sandbox Code Playgroud)

3.不要这样做.

行为的差异是设计的,并且有意义 - 在开发本地的框中,您可以看到所有单独的脚本/ css文件,并且以未明确的形式,这使得调试变得更加容易.发布后,文件会被压缩为一个压缩文件,这将减少您网站的加载时间.

我个人推荐选项3,并确保您的样式/脚本包含在正确的顺序中.