ASP.NET MVC проверка формы ввода действительна при отправке - PullRequest
7 голосов
/ 14 января 2010

У меня есть форма, которая при отправке показывает занятую анимацию и отключает кнопку отправки.

Кто-нибудь знает, как запросить Microsoft Sys.Mvc.FormValidation, чтобы проверить, прошла ли форма ее тест, чтобы я мог предотвратить отображение занятой анимации, если форма фактически не была отправлена? Есть ли другой обходной путь?

В настоящее время мой клиентский JavaScript выглядит так:

$('form').submit(function() {
    $('input[type=submit]', this).attr('disabled', 'disabled');
    ShowBusy();
});

Ура, Gavin

Ответы [ 3 ]

9 голосов
/ 15 января 2010

В конце концов я отказался и подключил библиотеку проверки JQuery, используя Microsoft ASP.NET MVC 2 RC и файл библиотеки MicrosoftMvcJQueryValidation.js из проекта «futures», чтобы автоматически связать все для меня.

Эта статья объясняет процесс: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Таким образом, с проверкой JQuery все, что мне нужно было сделать, это сделать вызов valid () ...

$('form').submit(function() {
    if ($('form').valid()) {
        $('input[type=submit]', this).attr('disabled', 'disabled');
        ShowBusy();
    }
});
0 голосов
/ 17 января 2011

Это работает только для MVC 1.0, в MVC 2.0 Microsoft перешла на использование jQuery, и это больше не работает.

onformSubmit: function (e) {
    if (!Sys.Mvc.FormContext && Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length) {
    return;
    showBusy();
}

Если вы используете помощник Ajax.BeginForm, вы можете сделать что-то вроде

Ajax.BeginForm("action","controller", AjaxOptions{ OnBegin="onformSubmit",...}
0 голосов
/ 14 января 2010

Использование http://jquery.malsup.com/form/. Вот как я это делаю - этот метод обрабатывает ошибку (и другие условия), чтобы остановить анимацию. Он также может либо отрегулировать форму, либо отправить ее сразу (в зависимости от флага отправки) и выполнить несколько других действий.

function GenericAjaxForm(form, success, submit, beforeSubmit) {
   var form = $(form);
   var options = {
      beforeSubmit: function(data, frm, options) {
         form.disable(true);
         form.find("input:submit:last").after(
            "<span class='ajaxwait'><img src='../Content/images/smallwait.gif' /></span>");
         if (beforeSubmit)
            return beforeSubmit(data, frm, options);
      },
      error: function(xhr, status, error) {
         $(".validation-summary-errors").html(getAjaxErrorMessage(status, xhr));
         form.disable(false);
         form.find(".ajaxwait").remove();
      },
      success: function(data) {
         form.disable(false);
         form.find(".ajaxwait").remove();
         $(".validation-summary-errors").html('');
         if (CheckValidationErrorResponse(data, form))
            return;
         success(data);
      }
   };
   if (submit)
      form.ajaxSubmit(options);
   else
      form.ajaxForm(options);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...