2008-11-18 52 views
28

Tengo una vista MVC con un formulario creado con el método auxiliar Ajax.BeginForm(), y estoy tratando de validar la entrada del usuario con el jQuery Validation plugin. Obtengo el complemento para resaltar las entradas con datos de entrada no válidos, pero a pesar de la entrada no válida, el formulario se publica en el servidor.ASP.Net MVC formulario Ajax con validación jQuery

¿Cómo detengo esto y me aseguro de que los datos solo se publiquen cuando el formulario se valida?

Mi código


La forma:

<fieldset> 
    <legend>leave a message</legend> 
     <% using (Ajax.BeginForm("Post", new AjaxOptions 
      { 
       UpdateTargetId = "GBPostList", 
       InsertionMode = InsertionMode.InsertBefore, 
       OnSuccess = "getGbPostSuccess", 
       OnFailure = "showFaliure" 
      })) 
      { %> 
     <div class="column" style="width: 230px;"> 
      <p> 
       <label for="Post.Header"> 
        Rubrik</label> 
       <%= Html.TextBox("Post.Header", null, new { @style = "width: 200px;", @class="text required" }) %></p> 
      <p> 
       <label for="Post.Post"> 
        Meddelande</label> 
       <%= Html.TextArea("Post.Post", new { @style = "width: 230px; height: 120px;" }) %></p> 
     </div> 
     <p> 
      <input type="submit" value="OK!" /></p> 
    </fieldset> 

La validación de JavaScript:

$(document).ready(function() { 
    // for highlight 
    var elements = $("input[type!='submit'], textarea, select"); 
    elements.focus(function() { 
     $(this).parents('p').addClass('highlight'); 
    }); 
    elements.blur(function() { 
     $(this).parents('p').removeClass('highlight'); 
    }); 

    // for validation 
    $("form").validate(); 
}); 

EDIT: Cuando estaba downvotes de la PU blecer problemas de seguimiento y sus soluciones en respuestas, aquí es también el método de validación de trabajo ...

function ajaxValidate() { 
    return $('form').validate({ 
    rules: { 
     "Post.Header": { required: true }, 
     "Post.Post": { required: true, minlength: 3 } 
    }, 
    messages: { 
     "Post.Header": "Please enter a header", 
     "Post.Post": { 
      required: "Please enter a message", 
      minlength: "Your message must be 3 characters long" 
      } 
     } 
    }).form(); 
} 

Respuesta

30

Trate de añadir una devolución de llamada OnBegin a los AjaxOptions y devolver el valor de $ ('forma'). validar () .form() desde la devolución de llamada. Mirando el source parece que esto debería funcionar.

function ajaxValidate() { 
    return $('form').validate().form(); 
} 

<% using (Ajax.BeginForm("Post", new AjaxOptions 
     { 
      UpdateTargetId = "GBPostList", 
      InsertionMode = InsertionMode.InsertBefore, 
      OnBegin = "ajaxValidate", 
      OnSuccess = "getGbPostSuccess", 
      OnFailure = "showFaliure" 
     })) 
     { %> 

EDITAR actualizado con el nombre de devolución de llamada correcta.

+1

OnSubmit no es una de las opciones disponibles en el VS intellisense. Sin embargo, al utilizar OnBegin en su lugar, su solución funciona como un encanto. ¡Muchas gracias por la respuesta rápida y correcta! =) –

Cuestiones relacionadas