У меня простой вид. Пользователь заполняет форму на предыдущей странице и затем отправляет форму Ajax. Форма подтверждает, что все, включая оплату, хорошо. Если это не так, он остается на той же странице с ошибкой (отсюда и AJAX), но если это хорошо, то он перенаправляет на страницу подтверждения через:
var url = '@Url.Action("PYGConfirmationPost", "PYG")';
, которая загружает вид, который выглядиткак на картинке ниже. Раскрывающийся список содержит все электронные письма, которые были добавлены на предыдущем экране. Так что все очень просто. На странице есть только 3 вещи из jQuery / JavaScript. Одним из них является Google Analytics. два других находятся под изображением.
//Prevents user from going back to the form. Used and works on many Views.
history.pushState("", "", "../Home/Index")
//auto submit in 30 seconds
$(document).ready(function () {
setTimeout(function () {
$("#PreSubmit").trigger('click');
}, 30000);
});
//After 30 seconds, submit GA and then submit the form.
$('#PreSubmit').click(function () {
//Submit google analytics here
$("#submit").trigger('click');
});
Вот метод, который он вызывает. Я ставлю точку останова вверху и возвращаю RedirectToAction. По какой-то причине, как только он попадет в скобку (}) прямо под возвращаемым перенаправлением ... он вернется наверх и начнет метод заново. РЕДАКТИРОВАТЬ: Я удалил все, кроме возврата RedirectToAction, и он все еще делает цикл.
[RequireAuth]
[HttpPost]
public ActionResult PYGConfirmationPost(PYG SignUp)
{
//EDIT: The code in the controller isn't the issue. I deleted everything except for the return statement and it still does the strange loop.
return RedirectToAction("Index", "Home");
}
Он последовательно будет запускать метод 2x, но если я пройдусь по нему, он сделает это где-нибудь с 2-6x. Я обычно сдаюсь после 6х, так что это может сделать больше. Один раз он делал метод только один раз.
Я пытался переместить RedirectToAction в OperationKillTheCookies (), но это не помогло. Я попытался изменить RedirectToAction на View, но это не помогло.
Я подумал, может быть, на это повлияло ограничение по времени от jQuery, но независимо от того, насколько быстро или медленно я позволяю циклу идти, он ведет себя одинаково.
Редактировать Я создал тест с использованием веб-драйвера selenium (в частности, драйвера Chrome). Он не зацикливает метод при запуске метода тестирования.
Edit 2 Он не делает это со всех компьютеров. Еще 2 человека попробовали это, и это сработало как хотелось пару раз каждый. Однако, 2 других человека попробовали это, и это срабатывало слишком много раз. Я понятия не имею, в чем может быть проблема.