asp.net статус проверки клиентской стороны mvc: необходимо прикрепить / отсоединить оверлей - PullRequest
0 голосов
/ 20 августа 2011

Я нахожусь в процессе создания приложения ASP.NET MVC 2, которое использует аннотации данных для генерации проверочных данных на стороне клиента

У меня есть следующий JQuery для добавления наложения при каждом нажатии кнопки на форме

    $(":button").click(function () {
     var overlay = jQuery('<div id="overlay"><img src="/content/images/indicator2.gif" alt="Processing Request Please Wait"/> </div>');
    overlay.appendTo(document.body);
    });

это работает большую часть времени, но я заметил, что много раз, когда проверка на стороне клиента терпит неудачу, наложение остается.

Я хочу прикрепить наложение, только если нет проверки на стороне клиентаошибки.Как я могу получить статус проверки на стороне клиента.

что-то вроде

if( client_error==null)
{
attach overlay

}

Кроме того, если это неправильный способ получить оверлей, дайте мне знать.

Найден еще один вопрос, но нет ответа https://stackoverflow.com/questions/4848539/block-ui-and-client-side-validations

Спасибо,

Мар

** Редактировать **

Решение Некнонаиболее подходит прямо сейчас.

Я нашел другую ссылку, которая может дать более глубокое понимание для других, ищущих ту же вещь

http://www.phpvs.net/2010/04/26/manually-validate-an-asp-net-mvc-form-on-the-client-side-with-microsoftmvcvalidation-js-and-jquery/

Ответы [ 2 ]

0 голосов
/ 21 августа 2011

Если позволяет ваша ситуация, загрузите плагин jQuery Block UI .Будет делать то, что вы хотите (чтобы показать это сообщение).Это довольно просто, я использую его все время.

0 голосов
/ 20 августа 2011

Используете ли вы традиционную форму (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>

См. дополнительную информацию отСкотт Гатри , где он демонстрирует отмену отправки формы и ее отправку самостоятельно.Он делает это для работы с динамическими данными из частичных представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...