tag net mvc form for asp asp.net-mvc-3 jquery-validate unobtrusive-validation

asp.net mvc 3 - net - Validar un campo oculto



razor form asp net mvc (3)

En algunos casos, solo desea ignorar la validación en uno o varios campos ocultos (no todos los campos ocultos) en client side y también desea validarlos y otros campos ocultos en el server side . En estos casos, tiene atributos de validación para todos los campos ocultos en su ViewModel y se utilizarán para validar el formulario cuando lo publique ( server side ).

Ahora necesita un truco para validar algunos de los campos ocultos en el lado del cliente (no todos). En estos casos te recomiendo que uses mi mecanismo!

Establezca data-force-val como true en las etiquetas de entrada ocultas del objetivo. Es nuestro atributo personalizado que utilizamos para detectar entradas ocultas de destino que queremos validar en el lado del cliente.

// This hidden input will validate both server side & client side <input type="hidden" value="" name="Id" id="Id" data-val-required="The Id field is required." data-val="true" data-force-val="true"> // This hidden input will validate both server side & client side <input type="hidden" value="" name="Email" id="Email" data-val-required="The Email field is required." data-val="true" data-force-val="true"> // This hidden input just will validate server side <input type="hidden" value="" name="Name" id="Name" data-val-required="The Neme field is required." data-val="true">

También puede establecer data_force-val para sus entradas ocultas por jQuery :

$("#Id").attr("data-force-val", true); // We want validate Id in client side $("#Email").attr("data-force-val", true); // We want validate Email in client side $("#Name").attr("data-force-val", false); // We wont validate Name in client side (This line is not necessary, event we can remove it)

Ahora, active data-force-val="true" mediante algunos códigos simples como estos:

var validator = $("#TheFormId").data(''validator''); validator.settings.ignore = ":hidden:not([data-force-val=''true''])";

Nota: el valor predeterminado de validator.settings.ignore es :hidden

Estoy usando MVC3 con validación discreta. Tengo un campo que se espera que el usuario llene con algunos datos y luego presione el botón "buscar". Si nunca se ha presionado la búsqueda o el usuario ha cambiado el campo de entrada después de presionar la búsqueda, el formulario no debería ser posible enviar.

He agregado un campo oculto que se establece en true por el evento click() del botón y se vacía por el evento keyup() del cuadro de entrada. Ahora me gustaría agregar una regla de validación que requiere que el campo oculto sea true para permitir el envío.

Preferiblemente, me gustaría usar una validación discreta, pero si eso no funciona, está bien con algo que requiera algún javascript, siempre y cuando no estropee la validación discreta para el resto del formulario.

El siguiente fragmento de código hace exactamente lo que quiero, hasta que agrego type="hidden" .

<input class="required" id="client-searched" data-val="true" name="ClientSearched" data-val-required="Press search!"/> <span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="ClientSearched"/>


Tuve un problema similar, y utilicé este código para cambiar los valores predeterminados, en MVC 4:

@Scripts.Render("~/bundles/jqueryval") <script type="text/javascript"> $.validator.setDefaults({ ignore: "" }) </script>

Fuente: JQuery validate


tratar

var validator = $("#myFormId").data(''validator''); validator.settings.ignore = "";

Aquí hay un blog informativo.

EDITAR

@RAM sugirió una mejor solución, POR FAVOR FOLLOW