【问题标题】:ASP.NET MVC 4: cannot modify jQuery Unobtrusive AjaxASP.NET MVC 4:无法修改 jQuery Unobtrusive Ajax
【发布时间】:2013-03-13 06:07:33
【问题描述】:

使用ASP.NET MVC 4NuGet 管理包。

在通过NuGet 升级到jQuery 1.9.1 后,我开始收到JavaScript 关于删除jQuery 1.9.x 中的live() 函数的错误。

我在 VS.NET 中按 F5 以调试模式运行,进入登录页面,得到以下信息:

找到这个 StackOverflow 答案:https://stackoverflow.com/a/14512797 并对~\Scripts\jquery.unobtrusive-ajax.js 进行了 4 处更改。

我的~\Scripts\jquery.unobtrusive-ajax.js

    $(document).on("click", "a[data-ajax=true]", function (evt) {
       ...
    });
    $(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) {
       ...
    });
    $(document).on("click", "form[data-ajax=true] :submit", function (evt) {
       ...
    });
    $(document).on("submit", "form[data-ajax=true]", function (evt) {
       ...
    });

我还物理删除了 jquery.unobtrusive-ajax.min.js 并使用 WebGrease 1.3.0 从我更新的 ~\Scripts\jquery.unobtrusive-ajax.js 中重新生成它。

但是,由于某种原因,我对不使用 .live() 函数的更改并没有坚持下去。我尝试停止 VS.NET 在其下运行 MVC 应用程序的 IIS Express 8.0 网站 (localhost:63798)。

还尝试执行 Build->Clean Solution,Build->Rebuild Solution,然后按 F5 再次以调试模式运行。

如果有人以前经历过这种情况并有任何见解,我将不胜感激。先感谢您。

【问题讨论】:

  • 您的观点中引用了哪些库?
  • @DaveA 在那个视图上,/Scripts/jquery-1.9.1.js/Scripts/jquery.unobtrusive-ajax.js/Scripts/jquery.validate.js/Scripts/jquery.validate.unobtrusive.js
  • 您是否尝试过清除缓存或从其他浏览器访问?或者,使用 chrome,调出开发人员工具并单击 /Scripts/jquery.unobstrusive-ajax.js(未缩小)以查看文件源以验证您的更改是否正在推送。我认为有些东西正在保留旧副本。
  • 有使用最新的 Unobtrusive Ajax 包吗?我的 MVC4 项目中的最新版本(2.0.30116.0)使用 .on(),而不是 .live()
  • @Tommy 感谢您的建议和洞察力,我很感激。我想不知何故,自从我使用 NuGet 然后更新了不显眼的 ajax 之后,NuGet 就挂在了一个纯副本上。我按照 jmoerdyk 的回答解决了我的问题。

标签: jquery asp.net-mvc asp.net-mvc-4 visual-studio-2012 unobtrusive-ajax


【解决方案1】:

Microsoft jQuery Unobtrusive Ajax 软件包已在版本 2.0.30116.0 中修复以解决此问题。对.live() 的调用已更改为使用.on()

尝试升级您的 NuGet 包以获取最新版本。

但是,使用 jQuery Migrate 包的建议是一个很好的建议,可以发现其他插件或您自己的代码中与 jQuery 1.9+ 中的更改不兼容的问题。

【讨论】:

  • +1 不必使用迁移文件并找到一个纯粹通过升级 Nuget 包来工作的解决方案要好得多,而且您完全正确,对于个人代码,迁移文件仍然非常有用如果需要,用于升级遗留代码。我会记下链接库的 2 月升级。非常好的信息。
  • 这解决了我的问题。非常感谢。我进入NuGet 并升级了 Microsoft jQuery Unobtrusive Ajax。有趣的是,我之前找不到它,因为我不知道要搜索的确切名称,感谢分享 NuGet Gallery 链接,我不知道存在这样的网站(让我想起 Java 中的 Maven Central)。
【解决方案2】:

live() 已在 jQuery 1.9 中与其他一些功能一起被删除。

如果您需要支持已删除的功能,您还需要添加包含已删除功能的 jQuery 迁移文件。

添加类似于下面的引用应该包括您需要的所有功能:

<script src="http://code.jquery.com/jquery-migrate-1.1.1.js"></script>

调试模式下的迁移文件还会向您的控制台添加警告,在您使用任何已删除的功能时通知您。这将帮助您在进行过程中慢慢替换它们,最终您可以仅使用 jQuery 1.9 及更高版本来删除迁移文件引用。

有关迁移到 jQuery 1.9 的所有详细信息,请参阅以下 jQuery 博客文章。

【讨论】:

  • +1 可获得很多有用的参考链接。但是,我确实已经从 jquery.unobtrusive-ajax.js 手动删除了 .live(),请参阅我的代码 sn-p。我将尝试使用 jquery-migrate,因为由于某种原因,我无法让我对 jquery.unobtrusive-ajax.js 的更改保持不变。
  • @PhilipTenn:希望对迁移文件的引用能够解决问题。迁移文件的整个想法是支持迁移并帮助依赖第三方插件/库的开发人员,他们不能直接更改他们自己。我不知道 Nuget 是否有下载迁移文件的参考,但如果您对 Nuget 有疑问,您可以随时尝试删除对 j​​Query 文件的 Nuget 引用并手动下载所需文件并将它们包含在您的项目中,包括迁移文件。
  • 非常感谢您的回答。它真的很有帮助。我最终接受了 jmoerdyk 的回答,但您的信息和见解也非常有帮助。
  • @PhilipTenn:你是绝对正确的。更新nuget包是正确的方法。我不知道 2 月份的版本,我自己一定会注意到这一点 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多