我刚刚更新jQuery和jQuery用户界面到:jQuery的1.9.0.min.js和jQuery-UI-1.9.2.min.js
而且......我所有的不显眼的Ajax调用(Ajax.ActionLink,Ajax.BeginForm)不能正常工作 - 他们在新页面中打开结果,而不是更新现有的div。
而我得到在Firebug这个JavaScript错误,当我的页面加载:
代码并没有改变,当然,刚刚更新使用的NuGet jQuery的脚本。
任何人都经历了同样的问题?
我刚刚更新jQuery和jQuery用户界面到:jQuery的1.9.0.min.js和jQuery-UI-1.9.2.min.js
而且......我所有的不显眼的Ajax调用(Ajax.ActionLink,Ajax.BeginForm)不能正常工作 - 他们在新页面中打开结果,而不是更新现有的div。
而我得到在Firebug这个JavaScript错误,当我的页面加载:
代码并没有改变,当然,刚刚更新使用的NuGet jQuery的脚本。
任何人都经历了同样的问题?
.live()
自1.7已弃用,并正式在jQuery的1.9去除 。 使用.on()
而不是因为它是做的首选方法同样的事情 。
更新:此问题已在最新的NuGet包。 我已经发布了另一个答案,以反映这一点。 https://stackoverflow.com/a/15539422/714309
在jquery.unobtrusive-ajax.js
,查找和替换这四行:
$("a[data-ajax=true]").live("click", function (evt) {
$(document).on("click", "a[data-ajax=true]", function (evt) {
$("form[data-ajax=true] input[type=image]").live("click", function (evt) {
$(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) {
$("form[data-ajax=true] :submit").live("click", function (evt) {
$(document).on("click", "form[data-ajax=true] :submit", function (evt) {
$("form[data-ajax=true]").live("submit", function (evt) {
$(document).on("submit", "form[data-ajax=true]", function (evt) {
您还可以生成一个新的jquery.unobtrusive-ajax.min.js
使用WebGrease。 从命令提示符,更改为您的解决方案文件夹并输入以下命令(假设你的项目文件夹被称为Web
):
packages\WebGrease.1.3.0\tools\WG.exe -m -in:Web\Scripts\jquery.unobtrusive-ajax.js -out:Web\Scripts\jquery.unobtrusive-ajax.min.js
更新微软jQuery的不显眼的Ajax NuGet包到最新版本。
在Visual Studio中,从工具菜单,选择库包管理器 ,然后单击程序包管理器控制台 。 在提示符下,键入:
Update-Package Microsoft.jQuery.Unobtrusive.Ajax
此问题已修复在Microsoft jQuery的不显眼的Ajax 2.0.30116.0(星期一,2013年2月18日),它取代了电话给.live()
方法(不建议使用jQuery的1.7和来自jQuery的1.9移除 )与建议.on()
方法。
修复与jQuery中的重大更改(在我看来)问题的最简单的方法是安装jQuery.Migrate
包,使您可以使用在1.9.0版本中删除的起弃用的函数调用。 至少在不显眼的ajax插件是由Microsoft更新。
此外,它看起来不显眼的AJAX插件的每日构建已经更新的API调用。 我没有测试它尚未但是你可能会发现,如何获得它在asp.net页面CodePlex上 。
更新:不显眼的Ajax和验证的NuGet包进行了更新,因此jQuery.Migrate
已经不再需要包。
另外需要做这些修正:
更新jQuery.Validation插件( 解决这个问题 )
https://nuget.org/packages/jQuery.Validation/1.11.0 (first available on nuget 2/4/13)
也使这些更改jquery.unobtrusive-ajax.js
文件( 在这里看到连接问题 )
Line 43: replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace")) !== false;
Line 73: replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace"));
更换
.live(function)
同
.on(eventType, selector, function)
https://stackoverflow.com/a/14354091/358906
下面是应为你工作的实际minified的文件。 为我工作反正。 我只是手动编辑它。
/*
** Unobtrusive Ajax support library for jQuery
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
(function(a){var b="unobtrusiveAjaxClick",g="unobtrusiveValidation";function c(d,b){var a=window,c=(d||"").split(".");while(a&&c.length)a=a[c.shift()];if(typeof a==="function")return a;b.push(d);return Function.constructor.apply(null,b)}function d(a){return a==="GET"||a==="POST"}function f(b,a){!d(a)&&b.setRequestHeader("X-HTTP-Method-Override",a)}function h(c,b,e){var d;if(e.indexOf("application/x-javascript")!==-1)return;d=(c.getAttribute("data-ajax-mode")||"").toUpperCase();a(c.getAttribute("data-ajax-update")).each(function(f,c){var e;switch(d){case"BEFORE":e=c.firstChild;a("<div />").html(b).contents().each(function(){c.insertBefore(this,e)});break;case"AFTER":a("<div />").html(b).contents().each(function(){c.appendChild(this)});break;default:a(c).html(b)}})}function e(b,e){var j,k,g,i;j=b.getAttribute("data-ajax-confirm");if(j&&!window.confirm(j))return;k=a(b.getAttribute("data-ajax-loading"));i=b.getAttribute("data-ajax-loading-duration")||0;a.extend(e,{type:b.getAttribute("data-ajax-method")||undefined,url:b.getAttribute("data-ajax-url")||undefined,beforeSend:function(d){var a;f(d,g);a=c(b.getAttribute("data-ajax-begin"),["xhr"]).apply(this,arguments);a!==false&&k.show(i);return a},complete:function(){k.hide(i);c(b.getAttribute("data-ajax-complete"),["xhr","status"]).apply(this,arguments)},success:function(a,e,d){h(b,a,d.getResponseHeader("Content-Type")||"text/html");c(b.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(this,arguments)},error:c(b.getAttribute("data-ajax-failure"),["xhr","status","error"])});e.data.push({name:"X-Requested-With",value:"XMLHttpRequest"});g=e.type.toUpperCase();if(!d(g)){e.type="POST";e.data.push({name:"X-HTTP-Method-Override",value:g})}a.ajax(e)}function i(c){var b=a(c).data(g);return!b||!b.validate||b.validate()}a(document).on("click", "a[data-ajax=true]", function(a){a.preventDefault();e(this,{url:this.href,type:"GET",data:[]})});a(document).on("click", "form[data-ajax=true] input[type=image]", function(c){var g=c.target.name,d=a(c.target),f=d.parents("form")[0],e=d.offset();a(f).data(b,[{name:g+".x",value:Math.round(c.pageX-e.left)},{name:g+".y",value:Math.round(c.pageY-e.top)}]);setTimeout(function(){a(f).removeData(b)},0)});a(document).on("click","form[data-ajax=true] :submit", function(c){var e=c.target.name,d=a(c.target).parents("form")[0];a(d).data(b,e?[{name:e,value:c.target.value}]:[]);setTimeout(function(){a(d).removeData(b)},0)});a(document).on("submit","form[data-ajax=true]",function(d){var c=a(this).data(b)||[];d.preventDefault();if(!i(this))return;e(this,{url:this.action,type:this.method||"GET",data:c.concat(a(this).serializeArray())})})})(jQuery);
只需更新脚本
1.下载最新的jQuery的,(我用jQuery的1.11.0虽然)
2.从微软官方下载最新的Microsoft.jQuery.Unobtrusive.Ajax
从这里:
https://github.com/aspnet/jquery-ajax-unobtrusive
3.不要硬刷新或清除浏览器缓存并再次检查你的页面。
希望可以帮助别人。