2016-02-26 1 views
0

Why does my jquery ajax form submit once on first submit, twice on second submit...?Ajax формы начинаются и обработчики успеха называются последовательно несколько раз с каждым представить

Form submitted twice after updating from ASP MVC 3 Preview to Beta

ASP.NET AJAX.BeginForm sends multiple requests

Моя форма имеет OnBegin и OnSuccess обработчики, как показано ниже. В первый раз, когда я его подаю, он работает нормально. Второй раз, когда я отправляю OnBegin и OnSuccess, вызывается дважды. В третий раз обработчики событий называются три раза и т. Д.

@using (Ajax.BeginForm("SaveTaxpayer", "Taxpayer", 
    null, 
    new AjaxOptions { HttpMethod = "Post", OnBegin = "SaveTaxpayerBegin", OnSuccess = "SaveTaxpayerSuccess", OnFailure = "radarApp.formSubmitFailure" }, 
    new { id="tpForm", style = "form-horizontal" })) 
{...} 

Я нашел несколько постов на SO, которые описывают подобную проблему и оказывается, разработчик был loadng JQuery-ненавязчивых несколько раз. Я не загружаю jquery несколько раз. Я верю, если бы я был обработчиком событий, каждый раз стрелял бы дважды. Я загружаю jQuery только на моей странице макета и эта страница вызывается один раз.

Я также нашел пост, где отвечающему предлагает

$("#myform").unbind('submit'); 

Это не работает для меня, когда помещен в OnBegin, OnSuccess, или обоих.

Несколько плакатов столкнулись с аналогичной проблемой и решили вернуть PartialView против View. Я возвращаю объект Json, поэтому я не думаю, что это тоже моя проблема.

Я удалил весь код из моих обработчиков событий формы для отладки:

function SaveTaxpayerBegin() { 
    debugger; 
} 

function SaveTaxpayerSuccess(response) { 
    debugger; 
    $.get(response.RedirectURL, function (data) { $('#content').empty().html(data); }, 'html'); 
} 

Мой контроллер возвращает простой объект JSON со строковым свойством, которое должно быть само собой разумеющимся: RedirectURL.

«#content» - это div в index.cshtml, который является содержимым div для всех частичных страниц в моем одностраничном приложении. Страница, на которой размещена моя форма, вызывается с использованием того же $ .get ..., что вы видите в вышеперечисленной функции SaveTaxpayerSuccess. Вот почему эта проблема настолько запутанна для меня. Содержимое div полностью сдувается каждый раз, когда загружается моя страница. Он появляется jquery или некоторый класс javascript поддерживает обработчики событий отправки формы.

Обратите внимание, что я вызываю .empty() в моем обработчике успеха $ .get (И на странице, загружающей мою форму). Документация jquery для .empty() говорит: «Чтобы избежать утечек памяти, jQuery удаляет другие элементы, такие как данные и обработчики событий из дочерних элементов, перед удалением самих элементов». Кажется, это не происходит.

+0

при #tpForm нажатии вы можете отвязать нажмите для #tpForm, а затем верните true? Должно пропустить вас и очистить в пути. –

+0

@ mwwallace8 Не уверен, что вы подразумеваете под щелчком. У меня есть два входа типа «submit», и у них нет обработчиков кликов. – Sam

+0

@ mwwallace8 Вы задумались в моей голове, поэтому я назвал свои кнопки отправки, а затем попробовал $ ("# btn1"). Unbind(); чтобы очистить обработчики событий, но он не работает. Спасибо, что указали на меня в этом направлении. – Sam

ответ

0

Вы добавили jquery.unobtrusive-ajax.js три раза. Это случилось со мной.

Проверить в расслоении конфигурации «~/Ui/JS/jquery.unobtrusive. *» и на странице вы добавили jquery.unobtrusive-ajax.js снова

Смежные вопросы