Я вытаскиваю свои волосы на этом. Я не понимаю, что происходит.
У меня есть метод Action, который возвращает JSon из метода Post. Нет аутентификации по этому методу. Это адаптация системы MVC 4 AjaxLogin (но использующая ее в MVC3)
Форма выполняет .post (), содержащую сериализованные данные. Если он не проходит проверку, он возвращает набор ошибок. Код выглядит так:
[HttpPost]
public JsonResult JsonLogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid) { ... }
// If we got this far, something failed
return Json(new { success = false, errors = GetErrorsFromModelState() });
}
Это вызывается в следующем jquery в методе, прикрепленном к обработчику отправки.
if (!$form.valid || $form.valid()) {
$.post($form.attr('action'), $form.serializeArray())
.done(function (json) { ... });
}
это странная часть. Если я использую кнопку отправки, все в порядке. Метод возвращается со статусом 200 (и выбор свойств по запросу в fiddler показывает SESSION STATE: Done.), И .done () выполняется.
Если я использую некоторый javascript для вызова form.submit (), тогда он делает сообщение, но http-запрос всегда завершается неудачей с СОСТОЯНИЕМ СЕССИИ: Прервано. (по-прежнему возвращает 200 код результата в соответствии с Fiddler) и .done () никогда не выполняется.
Буквально нет никакой разницы между любым заголовком или данными, отправляемыми методу действия в любом случае, но он всегда прерывается при использовании .submit () и всегда успешен при использовании кнопки отправки.
Я прикрепляю обработчик отправки следующим образом:
// Load the dialog with the content=1 QueryString in order to get a PartialView
$.get(url + separator + 'content=1')
.done(function (content) {
dialogs[id] = $('<div class="modal-popup">' + content + '</div>')
// (jquery ui dialog code omitted for clarity)
.filter('div') // Filter for the div tag only, script tags could surface
.find('#frm_login') // Attach logic on forms
.submit(formSubmitHandler)
.end();
});
Этот сводит меня с ума. Любые предложения по поиску причины, по которой это прерывается?
EDIT:
Версия браузера не имеет значения, она делает то же самое в IE, Firefox, Chrome и т. Д.
EDIT2:
Я попытался просто нажать кнопку «Использовать JS», чтобы нажать кнопку «Отправить», и это также не удалось.
Кажется, это связано с тем, что я выполняю отправку по ссылке href следующим образом:
<div id="loginBn"><a href="javascript:$('#blah').click();">Login</a></div>
Следующий код завершается успешно.
<button onclick="javascript:$('#blah').click();"></button>
Он не должен пытаться перемещаться куда-либо, учитывая ссылку на javascript, но, похоже, прерывается из-за этого.