ASP.NET MVC 4: невозможно изменить jQuery Ненавязчивый Ajax

Использование ASP.NET MVC 4 и NuGet для управления пакетами.

После обновления до jQuery 1.9.1 через NuGet у меня стали появляться JavaScript ошибки относительно удаления функции live() в jQuery 1.9.x.

Я нажимаю F5 для запуска в режиме отладки из VS.NET, перехожу на страницу входа и получаю следующее:

Ошибка Microsoft JScript

Нашел этот ответ StackOverflow: https://stackoverflow.com/a/14512797 и внес 4 изменения в ~\Scripts\jquery.unobtrusive-ajax.js.

Мой ~\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(), не сохраняются. Я попытался остановить веб-сайт IIS Express 8.0 (localhost:63798), под которым VS.NET запускает приложение MVC.

Также попытался выполнить Build-> Clean Solution, Build-> Rebuild Solution, прежде чем нажать F5, чтобы снова запустить в режиме отладки.

Если кто-то сталкивался с этим раньше и имеет какое-то представление, я был бы очень благодарен. Заранее спасибо.


person Philip Tenn    schedule 12.03.2013    source источник
comment
на какие библиотеки вы ссылаетесь в своих представлениях?   -  person Dave Alperovich    schedule 13.03.2013
comment
@DaveA В этом представлении /Scripts/jquery-1.9.1.js, /Scripts/jquery.unobtrusive-ajax.js, /Scripts/jquery.validate.js, /Scripts/jquery.validate.unobtrusive.js   -  person Philip Tenn    schedule 13.03.2013
comment
Пробовали очищать кеш или заходить из другого браузера? Или, используя Chrome, откройте инструменты разработчика и нажмите /Scripts/jquery.unobstrusive-ajax.js (не минимизированный), чтобы просмотреть источник файла и убедиться, что ваши изменения вносятся. Я думаю, что-то держится за старую копию.   -  person Tommy    schedule 13.03.2013
comment
Использовали последний пакет Unobtrusive Ajax? Последняя версия (2.0.30116.0) в моем проекте MVC4 использует .on(), а не .live()   -  person jmoerdyk    schedule 13.03.2013
comment
@Tommy Спасибо за ваше предложение и понимание, я ценю это. Я думаю, что с тех пор, как я использовал NuGet, а затем обновил ненавязчивый ajax, NuGet зависел от чистой копии. Я последовал ответу jmoerdyk, и он решил мою проблему.   -  person Philip Tenn    schedule 13.03.2013


Ответы (2)


Пакет Microsoft jQuery Unobtrusive Ajax исправлен в версии 2.0.30116.0. чтобы решить эту проблему. Вызовы .live() были изменены на использование .on().

Попробуйте обновить пакет NuGet, чтобы получить последнюю версию.

Однако рекомендуется использовать пакет jQuery Migrate для поиска проблем в других плагинах или в вашем собственном коде, несовместимых с изменениями в jQuery 1.9+.

person jmoerdyk    schedule 12.03.2013
comment
+1 Отсутствие необходимости использовать файл миграции и поиск решения, которое работает исключительно за счет обновления пакетов Nuget, намного лучше, и вы совершенно правы, конечно, что для личного кода файл миграции по-прежнему очень полезен для обновления устаревшего кода, если это необходимо. Я запишу это февральское обновление связанной библиотеки. Очень хорошая информация. - person Nope; 13.03.2013
comment
Это решило мою проблему. Большое Вам спасибо. Я зашел в NuGet и обновил Microsoft jQuery Unobtrusive Ajax. Забавно, я не мог найти его раньше, потому что не знал точного имени для поиска, спасибо, что поделились этой ссылкой на галерею NuGet, я не знал, что такой сайт (напомнивший мне Maven Central в Java) существует. - person Philip Tenn; 13.03.2013

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.

person Nope    schedule 12.03.2013
comment
+1 за множество полезных справочных ссылок. Однако я уже удалил .live() вручную из jquery.unobtrusive-ajax.js, см. мой фрагмент кода. Я попробую использовать jquery-migrate, так как по какой-то причине я не могу сохранить свои изменения в jquery.unobtrusive-ajax.js. - person Philip Tenn; 13.03.2013
comment
@PhilipTenn: Надеюсь, ссылка на файл миграции поможет разобраться. Вся идея файла миграции состоит в том, чтобы поддерживать миграцию и, конечно же, помогать разработчикам, которые полагаются на сторонние плагины/библиотеки, которые они не могут изменить сами. Я не знаю, есть ли у Nuget ссылка для загрузки файла миграции, но если у вас есть проблемы с Nuget, вы всегда можете попытаться удалить ссылку Nuget на файлы jQuery, загрузить необходимые файлы вручную и включить их в свой проект, включая перенести файл. - person Nope; 13.03.2013
comment
Большое спасибо за ваш ответ. Это действительно помогло. В конце концов я принял ответ jmoerdyk, но ваша информация и понимание также были очень полезны. - person Philip Tenn; 13.03.2013
comment
@PhilipTenn: вы абсолютно правы. Обновление пакета nuget — правильный путь. Я не знал о февральском релизе и обязательно приму к сведению :) - person Nope; 13.03.2013