2010-01-13 5 views
7

schließe ich eine Form haben, dass, wenn vorgelegt, ein Besetzt Animation zeigt und deaktiviert den Absenden-Button.ASP.NET MVC Check Formulareingabe ist gültig auf

Wer weiß, wie man Microsofts Sys.Mvc.FormValidation abfragt, um zu sehen, ob das Formular seinen Test bestanden hat, damit ich verhindern kann, dass die ausgelastete Animation anzeigt, ob das Formular tatsächlich abgeschickt wurde? Gibt es noch andere Probleme?

Derzeit meine Client-Seite JavaScript sieht wie folgt aus:

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

Cheers, Gavin

+0

Warum Sie die Antwort nicht akzeptieren kann? – Sampath

+1

@Sampath - wahrscheinlich, weil Stackoverflow nicht erlauben würde, mir meine eigene Antwort zu akzeptieren, bis einige Zeit vergangen war, so vergaß ich wahrscheinlich darüber. – Gavin

Antwort

9

Ich habe am Ende und in der JQuery Validierung Bibliothek statt mit dem Microsoft ASP.NET MVC 2 RC und die MicrosoftMvcJQueryValidation.js Bibliotheksdatei aus dem „Futures“ Projekt gesteckt automatisch für mich alles verkabeln .

Dieser Artikel beschreibt den Prozess: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

So mit JQuery Validierung in der Tat alles, was ich einen Anruf gültig machen war() ... tun musste

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

.valid() scheint nicht zu funktionieren? – SteveCl

+0

Hallo SteveCI, nicht für den Kontext, in der ich verwende Validierung will - siehe ursprüngliche Frage;) – Gavin

0

Verwendung http://jquery.malsup.com/form/. So mache ich das - diese Methode behandelt den Fehler (und andere Bedingungen), um die Animation zu stoppen. Es kann auch entweder formulieren oder direkt einreichen (abhängig von der Submit-Flagge) und einige andere Dinge tun.

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

Vielen Dank für das, aber ich versuche zu Microsofts eigener clientseitige MVC Validierung Bibliothek zu stecken, anstatt richtigen Funktion meiner eigenen CheckValidationErrorResponse. Ich verwende die automatische Validierung, die bei Verwendung von Datenanmerkungen bereitgestellt wird. Ich hoffe, es ist eine schöne einfache Möglichkeit, das Überprüfungsergebnis direkt von der Sys.Mvc.FormValidation Client-seitige Bibliothek abzufragen, habe aber noch nichts gefunden. Auch wenn kein Glück beim Austausch über zu JQuery Validierung suchen. Kam zu einem "Futures" -Projekt von Microsoft, das eine automatische Validierung gegen die Validierungsbibliothek von JQuery durchführt. – Gavin

0

Dies funktioniert nur für MVC 1.0, in MVC 2.0 wechselte Microsoft zu jQuery und das funktioniert nicht mehr.

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

Wenn Sie den Ajax.BeginForm Helfer verwenden Sie so etwas wie

Ajax.BeginForm("action","controller", AjaxOptions{ OnBegin="onformSubmit",...} 
Verwandte Themen