9

He creado mi propio atributo de validación condicional para validar mi modelo de MVC tanto en el cliente como en el servidor al heredar de RequiredAttribute e implementar IClientValidatable. La idea es que si una propiedad booleana en mi modelo es verdadera, entonces se requiere otra propiedad. En la vista de esto se manifiesta como una casilla de verificación que determina si un cuadro de texto necesita ser llenado en¿Cómo revalidar manualmente/activar la validación utilizando la validación jQuery discreta?

Esto funciona perfecto, excepto cuando el usuario realiza las siguientes acciones:.

  • Cheques la casilla de verificación (el campo es ahora se requiere).
  • Envía el formulario (la validación del lado del cliente se ejecuta, se muestra el mensaje de error).
  • El usuario desmarca la casilla (el mensaje de error permanece, el campo ya no es necesario).

Me gustaría volver a validar el formulario cuando la casilla de verificación está marcada o desmarcada, o incluso mejor solo revalidar ese campo, para que el mensaje de error ya no se muestre. He intentado varias combinaciones de llamar al método jQuery validate(), pero parece que nada puede volver a ejecutar la validación.

Utilizo el siguiente javascript para configurar mi función de validación y el adaptador no intrusivo asociado.

$.validator.addMethod(
    "requiredif", 
    function(value, element, parameters) { 
     var selector = "#" + parameters["dependentpropertyname"]; 
     var triggerValue = parameters["triggervalue"].toString().toLowerCase(); 
     var actualValue = $(selector).is(":checked").toString().toLowerCase(); 
     if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters); 

     return true; 
    }); 

$.validator.unobtrusive.adapters.add(
    "requiredif", 
    ["dependentpropertyname", "triggervalue"], 
    function(options) { 
     options.rules["requiredif"] = { 
      dependentpropertyname: options.params["dependentpropertyname"], 
      triggervalue: options.params["triggervalue"] 
     }; 
     options.messages["requiredif"] = options.message; 
    } 
); 

¡Gracias!

Respuesta

-4

Deberías echar un vistazo a Foolproof Validation. Hace lo que intentas hacer sin que tengas que hacer el tuyo.

+0

¡Eso se ve genial! Gracias por el enlace, pero todavía tengo el mismo problema. Es decir. ¿Cómo revalidar/activar la validación en el cliente para todo o parte de mi formulario? – andrej351

+2

Esto no responde la pregunta. El OP ha preguntado cómo pelar y naranja y usted ha respondido diciendo que debería comer una manzana. Posiblemente sea un comentario. – Liam

13

Tuve un problema similar en el que quería revalidar un campo datepicker utilizando jquery validate y jquery ui. This post me ayudó a resolverlo.

La clave, es simplemente agregar una devolución de llamada al método válido para ese selector. Algo como:

$(".requiredif").change(function() { 
    $(this).valid(); 
}) 
Cuestiones relacionadas