У меня есть модальное всплывающее окно с формой в нем. При отправке через ajax (используя jQuery) форма проверяется, и функция обратного вызова javascript проверяет, действительна ли модель. Если это так, модальное всплывающее окно сбрасывается и скрывается, в противном случае текст ответа html помещается в модальное всплывающее окно div, чтобы пользователь мог увидеть ошибку.
Я делаю это в ASP.NET MVC, используя jQuery ajaxSubmit и действие, которое принимает только глагол POST и возвращает PartialViewResult. Я делаю это в нескольких местах на моем сайте, но у меня проблемы с 2 такими рабочими процессами с одной страницы. Один работает, другой нет, используя идентичный код.
Вот проблема:
<% using (Html.BeginForm("ApplyPayment", "SomeController", FormMethod.Post, new { @id = "frmApplyPayment" })) { %>
<%= Html.AntiForgeryToken(SomeSaltString) %>
<%= Html.Hidden("ModelValid", ViewData.ModelState.IsValid) %>
...
<% } %>
Во время отладки, даже если ViewData.ModelState.IsValid имеет значение false, когда у меня возникают ошибки проверки, «#ModelValid» устанавливается в «True»! Я пробовал много способов явно установить его в false (например, ViewData.ModelState.IsValid? "True": "False"). Он всегда отображается как true, хотя переменная имеет значение false и скрывает всплывающее окно. Что происходит?
Вот еще код для справки:
function SubmitPaymentForm(form) {
$(form).ajaxSubmit({ target: "#modalApplyPayment", success: CheckPaymentValidity });
}
function CheckPaymentValidity(responseText) {
if ($("#ModelValid").val() != "True") {
ShowModalPopup("#modalApplyPayment");
}
else {
HideModalPopup("#modalApplyPayment");
}
}
Все это полностью работает для очень похожего рабочего процесса на той же базовой странице для функции отправки электронной почты (всплывающее окно, которое получает адрес, проверяет в сообщении ajax, показывает всплывающее окно, если существует ошибка проверки).