2010-01-13 2 views
7

У меня есть форма, которая при отправке показывает оживленную анимацию и отключает кнопку отправки.Вход формы проверки MVC ASP.NET действителен при отправке

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

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

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

Приветствия, Gavin

+0

Почему вы не принимаете ответ? – Sampath

+1

@Sampath - возможно, потому, что stackoverflow не позволил мне принять мой собственный ответ до тех пор, пока не прошло, поэтому я, вероятно, забыл об этом. – Gavin

ответ

9

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

В данной статье описывается процесс: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

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

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

.valid() похоже не работает? – SteveCl

+0

Привет, SteveCI, не для контекста, я хочу использовать валидацию - см. Исходный вопрос;) – Gavin

0

Используйте http://jquery.malsup.com/form/. Вот как я это делаю - этот метод обрабатывает ошибку (и другие условия), чтобы остановить анимацию. Он также может либо ajaxify 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); 
} 
+0

Благодарим за это, однако я пытаюсь подключиться к собственной клиентской стороне MVC для проверки подлинности Microsoft, а не к собственной функции CheckValidationErrorResponse. Я использую автоматическую проверку, предоставляемую при использовании аннотаций данных. Я надеюсь, что есть простой простой способ запросить результат проверки непосредственно из клиентской библиотеки Sys.Mvc.FormValidation, но пока ничего не нашел. Может потребоваться переустановка на проверку JQuery, если не повезет. Вышел через проект «фьючерсов» от Microsoft, который вместо этого выполняет автоматическую проверку подлинности с помощью библиотеки проверки JQuery. – Gavin

0

Это работает только для 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",...} 
Смежные вопросы