Je viens de mettre à jour jQuery & jQuery UI en: Jquery-1.9.0.min.js et Jquery-ui-1.9.2.min.js
Et ... tous mes appels Ajax discrets (Ajax.ActionLink, Ajax.BeginForm) ont cessé de fonctionner correctement - ils ouvrent les résultats dans une nouvelle page au lieu de mettre à jour le div existant.
Et j’obtiens cette erreur javascript dans Firebug lors du chargement de ma page:
Le code n'a pas changé, bien sûr, vient de mettre à jour les scripts jQuery à l'aide de Nuget.
Quelqu'un a connu le même problème?
.live()
est obsolète depuis la version 1.7 et était officiellement supprimé de jQuery 1.9 . Utilisez plutôt .on()
car c'est la méthode préférée pour faire le même chose .
Mettez à jour le package Microsoft jQuery Unobtrusive Ajax NuGet vers la dernière version.
Dans Visual Studio, dans le menu Tools, sélectionnez Library Package Manager, puis cliquez sur Package Manager Console. A l'invite, tapez:
Update-Package Microsoft.jQuery.Unobtrusive.Ajax
Ce problème a été résolu dans Microsoft jQuery Unobtrusive Ajax 2.0.30116.0 (lundi 18 février 2013), qui remplaçait les appels à la méthode .live()
(obsolète dans jQuery 1.7 et supprimé de jQuery 1.9 ) par la méthode recommandée .on()
.
Le moyen le plus simple de résoudre les problèmes liés aux modifications importantes de jQuery (à mon avis) consiste à installer le package jQuery.Migrate
qui vous permet d'utiliser des appels de fonction obsolètes supprimés à partir de la version 1.9.0. Au moins jusqu'à ce que le plug-in ajax discret soit mis à jour par Microsoft.
En outre, il semble que la compilation nocturne du plug-in ajax discret ait mis à jour les appels de l'API. Je ne l’ai pas encore testé, mais vous trouverez peut-être comment l’acquérir dans la page codeplex asp.net .
UPDATE: Les packages Unobtrusive Ajax et Validation Nuget ont été mis à jour afin que le package jQuery.Migrate
ne soit plus nécessaire.
Aussi besoin de faire ces corrections:
Mettre à jour le plugin jQuery.Validation ( pour résoudre ce problème )
https://nuget.org/packages/jQuery.Validation/1.11.0 (first available on nuget 2/4/13)
Apportez également ces modifications au fichier jquery.unobtrusive-ajax.js
( voir ici pour le problème de connexion )
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"));
Remplacer
.live(function)
Avec
.on(eventType, selector, function)
Voici un fichier minifié qui devrait fonctionner pour vous. Ça marche pour moi quand même. Je viens de le modifier manuellement.
/*
** 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);
Il suffit de mettre à jour vos scripts
1. Télécharger la dernière version de Jquery (j’ai cependant utilisé jquery-1.11.0)
2. Téléchargez le dernier Microsoft.jQuery.Unobtrusive.Ajax à partir du site officiel Microsoft.
D'ici:
https://github.com/aspnet/jquery-ajax-unobtrusive
3. Effectuez une actualisation matérielle ou effacez le cache de votre navigateur, puis vérifiez à nouveau votre page.
Hope aide quelqu'un.