¿Cómo puedo personalizar la validación discreta en ASP.NET MVC 3 para que coincida con mi estilo?

La validación predeterminada en MVC 3 se basa en la validación jQuery , que generalmente puedo personalizar con algo como:

$.validator.setDefaults({ submitHandler: function() { alert('submitHandler'); }, errorPlacement: function(error, element) { // do something important here alert('errorPlacement'); }, errorClass: "error", errorElement: "input", onkeyup: false, onclick: false }) 

Pero, eso no parece funcionar en MVC 3. Específicamente, errorPlacement nunca parece ser llamado y no tengo idea de por qué. Obtendré el submitHandler llamado, pero nunca errorPlacement.

¿Cómo puedo personalizar la validación para que coincida con cualquier estructura / estilo que requiera para el estilo de mi sitio? El valor predeterminado es excelente, pero no siempre funciona en todas las situaciones.

En mi código, en lugar de usar $.validator.setDefaults , $.validator.setDefaults al validador de formularios usando $("#form_selector").data('validator') y luego cambio la configuración.

 $(function () { var validator = $("#form_selector").data('validator'); validator.settings.errorPlacement = function(error,element) { alert('errorPlacement'); }; }); 

Mira si te funciona.

Tuve el mismo problema, pero me di cuenta de que el complemento discreto en realidad estaba solucionando el problema, ¡anularía las opciones que configures! El truco es tener su código escrito / incluido en el siguiente orden:

  1. El complemento de validación
  2. Su código personalizado y opciones
  3. El complemento discreto

¡Cualquier otro orden y esto no se configurará correctamente!

Manera correcta de hacer esto:

Orden de guión:

  1. El complemento de validación
  2. El complemento discreto
  3. Su código personalizado y opciones

Código personalizado y script de opciones:

 var settings = { //... }; // override jQuery unobtrusive validator settings $.validator.unobtrusive.options = settings; 

Todo lo que hice para esto simplemente duplicó mi estilo para que coincidiera con los elementos que agrega el validador discreto.

 @Html.ValidationMessageFor(x => x.EmailAddress, "", new { @class = "field-error" }) 

Cuando se produce un error de validación, “ValidationMessageFor” agrega una clase “error de validación de campo” como se muestra a continuación.

 Email address is Required. 

Así que dupliqué mi estilo como

 .field-error.***field-validation-error*** {position:relative;color:#fff;background:#589BC9;} 

Pensé que esta es la manera simple de arreglar esto.