2010-01-13 14 views
7

Tengo un formulario que, cuando se envía, muestra una animación ocupada y deshabilita el botón Enviar.La entrada de formulario de comprobación ASP.NET MVC es válida en el envío

¿Alguien sabe cómo consultar el Sys.Mvc.FormValidation de Microsoft para ver si el formulario pasó su prueba por lo que puedo evitar que la animación muestre si el formulario no se ha enviado? ¿Hay alguna otra solución alternativa?

En la actualidad mi lado del cliente JavaScript parece a esto:

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

Saludos, Gavin

+0

¿Por qué no se acepta la respuesta? – Sampath

+1

@Sampath - probablemente porque stackoverflow no me permitió aceptar mi propia respuesta hasta que haya pasado un tiempo, así que probablemente me olvidé de ello. – Gavin

Respuesta

9

me di por vencido en el final y enchufado en la biblioteca de validación de jQuery en lugar de utilizar el Microsoft ASP.NET MVC 2 RC y los MicrosoftMvcJQueryValidation.js archivo de biblioteca del proyecto "futuros" para conectar automáticamente a todo por mí .

En este artículo se explica el proceso: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Así que con la validación de jQuery, en efecto, todo lo que tenía que hacer era hacer una llamada al válida() ...

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

.valid() parece que no funciona? – SteveCl

+0

Hola SteveCI, no por el contexto en el que quiero usar la validación - ver la pregunta original;) – Gavin

0

Use http://jquery.malsup.com/form/. Así es como lo hago: este método maneja el error (y otras condiciones) para detener la animación. También puede ajaxificar el formulario o enviarlo de inmediato (dependiendo de la bandera de envío) y hacer otras dos cosas.

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

Gracias por eso, sin embargo, estoy intentando conectarme a la biblioteca de validación de MVC del lado del cliente de Microsoft en lugar de corregir mi propia función CheckValidationErrorResponse. Estoy usando la validación automática provista cuando uso anotaciones de datos. Espero que haya una forma sencilla y sencilla de consultar el resultado de la validación directamente desde la biblioteca del lado del cliente Sys.Mvc.FormValidation, pero aún no he encontrado nada. Puede que tenga que considerar el intercambio a la validación de JQuery si no tiene suerte. Conocí un proyecto de "futuros" de Microsoft que en su lugar realiza validación automática contra la biblioteca de validación de JQuery. – Gavin

0

Esto sólo funciona para MVC 1.0, en MVC 2.0 Microsoft cambió a usar jQuery y esto ya no funciona.

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

Si está utilizando el ayudante Ajax.BeginForm se puede hacer algo como

Ajax.BeginForm("action","controller", AjaxOptions{ OnBegin="onformSubmit",...} 
Cuestiones relacionadas