2010-01-13 3 views
7

J'ai un formulaire qui, une fois soumis, affiche une animation occupée et désactive le bouton de soumission. Quelqu'un sait comment interroger le Sys.Mvc.FormValidation de Microsoft pour voir si le formulaire a réussi son test afin que je puisse empêcher l'animation occupée si le formulaire n'a pas été envoyé? Y a-t-il d'autres solutions de rechange?La forme du chèque ASP.NET MVC entrée est valide sur soumettre

À l'heure actuelle mon JavaScript côté client ressemble à ceci:

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

Cheers, Gavin

+0

Pourquoi ne pas accepter la réponse? – Sampath

+1

@Sampath - probablement parce que stackoverflow ne me permettait pas d'accepter ma propre réponse jusqu'à un certain temps, donc je l'ai probablement oublié. – Gavin

Répondre

9

J'ai abandonné à la fin et enfiché dans la bibliothèque de validation JQuery au lieu d'utiliser 2 Microsoft ASP.NET MVC RC et le fichier bibliothèque MicrosoftMvcJQueryValidation.js du projet « à terme » à câbler automatiquement tout pour moi .

Cet article explique le processus: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Donc, avec la validation JQuery tout en effet que je devais faire était faire un appel à valid() ...

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

.valid() ne semble pas fonctionner? – SteveCl

+0

Bonjour SteveCI, pas pour le contexte dans lequel je veux utiliser la validation - voir la question originale;) – Gavin

0

Utilisez http://jquery.malsup.com/form/. Voici comment je fais - cette méthode gère l'erreur (et d'autres conditions) pour arrêter l'animation. Il peut également soit ajaxify forme ou le soumettre tout de suite (en fonction de l'indicateur de soumission), et faire deux autres choses.

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

Merci pour cela, cependant j'essaie de me connecter à la propre bibliothèque de validation MVC côté client de Microsoft plutôt que d'avoir ma propre fonction CheckValidationErrorResponse. J'utilise la validation automatique fournie lors de l'utilisation des annotations de données. J'espère qu'il y a une manière simple et agréable d'interroger le résultat de la validation directement à partir de la bibliothèque côté client Sys.Mvc.FormValidation, mais que vous n'avez encore rien trouvé. Il faudra peut-être jeter un oeil à la validation de JQuery si vous n'avez pas de chance. Entré dans un projet «futur» de Microsoft qui effectue une validation automatique à la place de la bibliothèque de validation de JQuery. – Gavin

0

Cela ne fonctionne que pour MVC 1.0, dans MVC 2.0 Microsoft est passé à l'utilisation de jQuery et cela ne fonctionne plus.

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

Si vous utilisez l'assistant de Ajax.BeginForm vous pouvez faire quelque chose comme

Ajax.BeginForm("action","controller", AjaxOptions{ OnBegin="onformSubmit",...} 
Questions connexes