6

estoy usandoCómo usar asp.net mvc 3 jquery validar con un diálogo de jquery que hace un ajax submit?

asp.net mvc 3 jQuery validar Javascript no obstructivo.

Estoy tratando de escribir toda mi validación en el servidor a través de anotaciones y luego tener la nueva característica de mvc 3 que se ocupe del lado del cliente.

Tengo un cuadro de diálogo que tiene un botón (solo un botón, no un botón de enviar) que quiero enviar datos al servidor a través de ajax.

Así que cuando el usuario hace clic en el botón, realizo un formulario de envío y devuelvo el mensaje de error para cancelar la publicación.

Pensé que activaría la validación, pero ese no parece ser el caso. ¿Cómo puedo activar el activador de validación del lado del cliente?

Editar

<form method="post" id="TaskFrm" action="/Controller/Action"> 

      <input type="text" value="" name="Name" id="Name" data-val-required="Name field cannot be left blank" data-val-length-max="100" data-val-length="task cannot exceed 100 characters" data-val="true"> 
</form> 

var $dialog = $('<div></div>').dialog(
      { 
       width: 580, 
       height: 410, 
       resizable: false, 
       modal: true, 
       autoOpen: false, 
       title: 'Basic Dialog', 
       buttons: 
        { 
         Cancel: function() 
         { 
          $(this).dialog('close'); 
         }, 
         'Create Task': function() 
         { 
          var createSubmitFrmHandler = $(my.selectors.createFrm).live('submit', function() 
          { 
           alert('hi'); 
           return false; 
          }); 

          createSubmitFrmHandler .validate(); 
          var a = createSubmitFrmHandler .valid(); 

          alert(a); 

         } 
        } 
      }); 

Esto siempre devolverá true.

Editar 2

si pongo un botón de envío dentro de la forma que se mostrará la validación del lado del cliente (utilizo jQuery para volver falsa como se muestra en el código).

Esto significa que tengo los scripts y todo pero no funciona por razones desconocidas cuando trato de hacerlo programático.

Datos 3

Metí la jQuery validar & & archivos jquery.validate.unobtrusive en la página maestra. Pero cuando los incluyo en la vista parcial que contiene los campos que se cargan y luego fuerzo un envío, la validación se inicia.

No entiendo. Estoy bastante seguro de que el rumbo es correcto ya que simplemente arrastré y solté el archivo en mi página maestra y descubrí el camino. Tenerlo en las vistas parciales no es realmente una solución ya que tendré que hacer esto varias veces y eso significa que cada vez que se cargue la vista parcial, obtuve otra copia de estos archivos.

Editar 4

creo que es sólo el jquery.validate.unobtrusive que necesita ser cargado por alguna razón cada vez. No estoy seguro de por qué.

+0

http://mrgsp.md:8080/awesome/person Haz clic en crear después de hacer clic en enviar – Omu

Respuesta

9

Algo como esto debe hacer el truco:

$("#my-button").click(function (event) { 
     event.preventDefault(); 

     $("#my-form").validate(); 

     if ($("#my-form").valid()) { 
      // ... 
     } 
    }); 
+1

Pensé que eso también sería bueno, pero me volví cierto. – chobo2

+0

Mismo problema que @ chobo2. Me vuelvo cierto ... ¿Qué falta? –

0

Esto se puede hacer usando una característica de ASP.NET MVC llama Remote Validation. Todo lo que tiene que hacer es decorar la propiedad que desea validar con un atributo [Remote] pasando el nombre del método que realiza la validación y el controlador en el que existe.

se puede encontrar un ejemplo de cómo How to: Implement Remote Validation in ASP.NET MVC

+0

Sé acerca de la validación remota, pero no creo que sea lo que necesito. Quiero decir que estoy verificando si un campo está vacío o no. No creo que necesite hacer una consulta al servidor para eso. Si estaba buscando nombres duplicados o algo así, entonces. Pero no solo para campos en blanco. – chobo2

+0

bien, lo siento, es solo que su pregunta es un poco ambigua. – AbdouMoumen

1
$("#my-button").click(function (event) { 
    event.preventDefault(); 

    $.validator.unobtrusive.parse("#my-form"); 

    if ($("#my-form").valid()) { 
     // ... 
    } 
}); 
7

El problema puede deberse a elementos que se agregan a la DOM después de que las cargas de script discreto inicialmente. Puede obligarlo a asociar los manejadores de validación con los nuevos elementos llamando al $.validator.unobtrusive.parse("form") después de crear el diálogo.

$("<div></div>").dialog(...) 
$.validator.unobtrusive.parse("form") 

Esto resolvió nuestro problema similar aunque visualicemos el formulario dentro del cuadro de diálogo.

+0

Esto funcionó para mí (estábamos jalando un formulario por javascript y necesitábamos que fuera validado en el envío). – carl

+0

¡Esto es exactamente lo que estaba sucediendo! Muchas gracias, me llevó una semana averiguar por qué mis formularios volvían a ser válidos aunque no había contenido y las propiedades se habían establecido en 'Requerido' en el Modelo –

Cuestiones relacionadas