Используете ли вы традиционную форму (Html.BeginForm()
) или форму AJAX (Ajax.BeginForm()
)?
Если вы используете форму AJAX, то вы можете справиться с этой ситуацией, поместив свой оверлей divв форме с style="display:none;"
и передачей объекта AjaxOptions
в форму, библиотека MVC AJAX автоматически покажет / скроет ее, только если форма пройдет проверку и отправит.
<% Html.EnableClientValidation(); %>
<% using(Ajax.BeginForm(new AjaxOptions() { LoadingElementId = "overlay" }) { %>
<div id="overlay" style="display:none;">
<img src="/content/images/indicator2.gif" alt="Processing Request Please Wait"/>
</div>
...
<% } %>
Вы можете проверитьпост Брэда Уилсона о Ненавязчивом Ajax в ASP.NET MVC 3 , в котором также обсуждается поведение MVC 2 перед ненавязчивым AJAX.
Если вы используете традиционную форму, то вы могли быпримените универсальный код показа-наложения ко всем формам на странице (как показано ниже) или присвойте своей форме идентификатор, чтобы вы могли показывать разные наложения для каждой формы.Вы вызываете метод проверки на стороне клиента, который возвращает массив ошибок.Если ошибок нет, проверка прошла успешно, и отправка продолжается.У этого есть побочный эффект вызова кода проверки дважды, потому что структура проверки MVC перехватывает событие отправки формы и автоматически вызывает validate () снова.Но тот факт, что это происходит дважды, незаметен, и в действительности, с динамической проверкой, которая проверяет поле, как только вы вводите значение и перемещаете фокус, код проверки уже запускается несколько раз на вашей странице в любом случае.Просто это не всегда происходит сразу два раза подряд.
Поместите этот скрипт в вид внизу, под всеми тегами формы:
<script type="text/javascript">
$("form").submit(function (e) {
var errors = Sys.Mvc.FormContext.getValidationForForm(this).validate('submit');
if (errors.length == 0) {
$("#overlay").show();
// Or use jQuery BlockUI
$.blockUI({ message: $("#overlay") });
}
});
</script>
См. дополнительную информацию отСкотт Гатри , где он демонстрирует отмену отправки формы и ее отправку самостоятельно.Он делает это для работы с динамическими данными из частичных представлений.