Los controles de validación que nos proporciona asp.net nos brindan una fácil manera de agregar validaciones a nuestros controles. Pero que pasa si tú quieres habilitar o deshabilitar un control de validación ante una determinada acción, como lograr esto...?
Habilitar la validación desde javascript:
Existe un método para habilitar o deshabilitar los controles de validación.
function ValidatorEnable(val, enable)
Donde val hace referencia al control de validación, y enable es un boolean para poder decirle al método cuando habilitar o deshabilitar la validación.
Caso Aplicativo:
Supongamos que tenemos un escenario donde queremos determinar si paginamos o no los registros a mostrar.
<div style="width:80%; margin:2em auto;">
<asp:ValidationSummary runat="server" ID="valSummary" ValidationGroup="val" />
<asp:CheckBox runat="server" ID="ckbPaginacion" Text="Habilitar paginación" />
<div id="registros">
Número de registros:
<asp:TextBox ID="txtNumeroRegistros" runat="server" Width="50" />
<asp:RequiredFieldValidator ID="valNumeroRegistros" runat="server"
ControlToValidate="txtNumeroRegistros" ValidationGroup="val"
Text = "*" ErrorMessage="Tu tienes que especificar el numero de registros"
ToolTip="Tu tienes que especificar el numero de registros"/>
</div><br />
<asp:Button runat ="server" ID="btnEnviar" Text="Enviar" ValidationGroup="val"/>
</div>
Queremos que al seleccionar una checkbox podamos ingresar el numero de registros que se mostraran por pagina y permitir la validación de mismo, pero al no estar chekeado deshabilitar la validación para ese campo.
Usamos jquery aquí para hacer el trabajo planteado de habilitar o deshabilitar:
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1.4.1", { uncompressed: true });
google.setOnLoadCallback(function() {
EnableValidator(false);
$("#<%= ckbPaginacion.ClientID%>").click(function() {
EnableValidator(this.checked);
});
});
function EnableValidator(isEnabled) {
ValidatorEnable($("#<%= valNumeroRegistros.ClientID%>")[0], isEnabled);
ValidationSummaryOnSubmit();
if(isEnabled == true)
$("#registros").show();
else
$("#registros").hide();
}
</script>
Nota: Debemos tener en cuenta el $("#ControlValidacionId")[0] para obtener el real DOM, y al método ValidationSummaryOnSubmit(), para actualizar los mensajes de validación.
Espero les sea de utilidad 