【问题标题】:jquery not included in bundlingjquery 不包含在捆绑中
【发布时间】:2012-04-30 19:39:19
【问题描述】:

我对我在项目中使用 jquery 的一个小问题感到困惑。该项目是 Visual Studio 11 中的 MVC4 站点。

问题是 jQuery 不包含在捆绑中,并且在我更新到 1.7.2 之前它似乎可以工作,但不能确定。

我可以在捆绑文件的顶部看到 jQuery 文件的注释,但找不到它的任何代码。所有其他文件似乎都包含在内(我自己的脚本和 jquery ui 文件)。

我尝试了捆绑过滤器并创建了自己的捆绑包,但似乎没有任何效果。

我真的很感激任何帮助,因为当页面加载时,所有 java 脚本都会因为找不到函数而崩溃。如果我只是正常包含 java 脚本文件,这确实有效。

编辑:

全球.asax:

protected void Application_Start()
{
    BundleTable.Bundles.EnableDefaultBundles();
}

_Layout.cshtml:

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>

更新 1:

我在 jQuery 文件中添加了一些代码,并且捆绑的文件包含在顶部。

function Test(){ }

然后改成这个了,这次没有代码了。

(function Test(){  })

奇怪的是,其他 jQuery 文件,比如 UI 文件并没有被删除,而且它们的方式相同。

编辑:似乎这是有意的

更新 2:

测试了更多,发现了哪个文件损坏了,如果我在我的自定义包中包含这些文件中的任何一个,它就会损坏

  • jquery.validate.js
  • jquery.validate.unobtrusive.js
  • jquery.unobtrusive-ajax.min.js

在他们之前我有这些,他们可以正常工作

  • jquery-1.7.2.min.js
  • jquery-ui-1.8.19.min.js
  • bootstrap.min.js

这仍然很奇怪,如果我在脚本中使用&lt;script src="~/Scripts/jquery.validate.js"&gt;&lt;/script&gt; 正常包含这些文件,它们可以正常工作,没有错误。

不过,如果我捆绑了工作文件,然后像往常一样添加非工作文件,它们仍然会中断

_Layout.cshtml:

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/myBundle")"></script>
<script src="~/Scripts/jquery.validate.js"></script>

全球.asax:

var bundle = new Bundle("~/js", new JsMinify());
bundle.AddFile("~/Scripts/jquery-1.7.2.min.js");
bundle.AddFile("~/Scripts/jquery-ui-1.8.19.min.js");
bundle.AddFile("~/Scripts/bootstrap.min.js");
BundleTable.Bundles.Add(bundle);

编辑:似乎捆绑的 jquery 文件中发生了一些变化,这使得验证插件中断

解决方法

我尝试在更新之前添加旧文件,它可以工作!设法发现是来自 NuGet 的新 jQuery UI 1.8.19 崩溃了。

我直接从他们的网站下载了 jquery ui,然后改用那个,它成功了!

因此,jquery ui nuget 版本中的某些内容似乎发生了变化,捆绑正在接受并更改/删除它,所以它会中断..

应该归咎于哪一部分? jQuery UI NuGet 包或 mvc4 捆绑?捆绑问题有解决方案吗?

【问题讨论】:

  • 你能告诉我们来自 global.asax 的代码,你的包是在哪里初始化的吗?
  • @SteveHobbs 添加了我提到的捆绑代码

标签: jquery asp.net-mvc asp.net-mvc-4


【解决方案1】:

解决方法

我尝试在更新之前添加旧文件,它可以工作!设法发现是来自 NuGet 的新 jQuery UI 1.8.19 崩溃了。

我直接从他们的网站下载了 jquery ui,并改用了那个,它成功了!

因此,jquery ui nuget 版本中的某些内容似乎发生了变化,捆绑正在接受并更改/删除它,所以它会中断..

应该归咎于哪一部分? jQuery UI NuGet 包或 mvc4 捆绑?捆绑问题有解决方案吗?

【讨论】:

  • 有趣的发现。我要做的就是向连接站点提交一些反馈,参考这个问题,看看它是否可以去任何地方。 goo.gl/E1PH6 - 还可以查看“已知问题”页面,看看是否有任何内容 - goo.gl/weq6b
  • 相当烦人的问题!此外,fwiw jQuery UI 1.8.18 NuGet 包与捆绑器配合得很好。
【解决方案2】:

我认为EnableDefaultBundles() 试图包含一个特定版本的 jQuery,所以如果你说你已经升级了它(并且可能删除了旧版本)我会冒险猜测并说 MVC 试图捆绑一个不再存在的文件。

您将不得不放弃使用EnableDefaultBundles(),或者至少编译一个额外的包并包含它。

你说你尝试过创建自己的,但你能再试一次吗?也许以下内容会有所帮助:

Bundle myJSBundle = new Bundle("~/MyJSBundle", typeof(JsMinify));
myJSBundle.AddDirectory("~/Scripts", "*.js", false);
BundleTable.Bundles.Add(myJSBundle);

显然更改路径和其他内容以匹配您自己的项目。然后将其包含在页面上,例如:

<script src="@Url.Content("~/MyJSBundle")" type="text/javascript"></script>

来源:http://www.dotnetexpertguide.com/2011/12/bundling-and-minification-aspnet-mvc4.html

【讨论】:

  • 谢谢,但没用。我看到了jQuery文件的注释,版本是正确的,但是代码不见了
  • 如果您在页面上正常包含脚本,我假设一切正常?
  • 是的,很抱歉没有将其包含在问题中
  • 在问题中添加了更多信息,如果有帮助的话
  • 仅供参考,在 MVC4 中我们不再需要使用@Url.Content("..,我们可以简单地使用&lt;script src="~/MyJsBundle"&gt;&lt;/script&gt;
猜你喜欢
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2014-11-21
  • 2014-11-03
  • 2017-08-15
相关资源
最近更新 更多