Estos controles (Validation controls) llevan a cabo la validación en el servidor. También es posible validar en el cliente gracias a código JavaScript y, en muchas ocasiones, ello puede ser válido para nuestros propósitos, pero la validación en el servidor es necesaria para tareas más complejas en las que la seguridad adquiere mayor importancia.
Los controles de validación de ASP .NET permiten:
Todos estos controles son controles Web, se ejecutan en el servidor y generan HTML que es enviado al cliente. La sintaxis básica es similar en todos ellos, aunque hay diferencias en las propiedades que admiten, según el tipo de control:
<asp:Validator Runat="server" ControlToValidate="Control" ErrorMessage="Texto informativo" />
Los tipos de controles de validación de que dispone ASP .NET son:
Es interesante remarcar que podemos usar etiquetas HTML en las cadenas de ErrorMessage con las posibilidades de personalización que ello conlleva.
Archivo WebUIValidation.js
Para que los controles Validation de ASP .NET funcionen, es necesario que exista en el servidor Web un archivo llamado WebUIValidation.js de JavaScript. Este archivo de secuencias de comando es generado de manera automática en la instalación de ASP .NET y ha de estar colocado en la ruta:
localhost/aspnet_client/system_web/nº_de_versión_de_Framework/WebUIValidation.js
Si por algún motivo no existe ese fichero, puede ser copiado manualmente desde otro servidor que lo posea o generado de nuevo con la orden "aspnet_regiiis -c". WebUIValidation.js contiene todas las funciones de HTML dinámico (DHTML) requeridas para ejecutar en el cliente el código HTML de validación generado por el servidor al compilar la página aspx.
Uso de los controles Validation en este ejercicio
Se crean 2 controles TextButton de ASP .NET para escribir en ellos las contraseñas, ambos controles se configuran como texto de tipo contraseña para que no muestren los caracteres tecleados sino asteriscos:
<asp:TextBox id="txtPassword" TextMode="Password" Width="120" Runat="server" MaxLength="10" EnableViewState="True"></asp:TextBox> <asp:TextBox id="txtConfirmar" TextMode="Password" Width="120" Runat="server" MaxLength="10" EnableViewState="True"></asp:TextBox>Se crean 2 controles RequiredFieldValidator (para comprobar si el usuario escribe algo en ambos campos de contraseña):
<asp:TextBox id="txtPassword" TextMode="Password" Width="120" Runat="server" MaxLength="10" EnableViewState="True"> </asp:TextBox> <asp:TextBox id="txtConfirmar" TextMode="Password" Width="120" Runat="server" MaxLength="10" EnableViewState="True"> </asp:TextBox>
También se crea un control CompareValidator para comparar el campo txtContraseña con un valor constante (xxx en este ejercicio) y se crea otro control CompareValidator que comprueba si el contenido de ambas cajas de texto es idéntico:
<asp:CompareValidator ID="valPassword2" Runat="server" ControlToValidate="txtPassword" ValueToCompare="xxx" Operator="Equal" EnableClientScript="True" Display="None" ErrorMessage="<br><div align=center><b>Contraseña</b> no válida.</div>" /> <asp:CompareValidator id="valComparar" ControlToValidate="txtConfirmar" Runat="server" ControlToCompare="txtPassword" Display="None" EnableClientScript="true" ErrorMessage="<br><div align=center>Ambas contraseñas deben <b>coincidir</b>.</div>" />
Por último, se crea un control ValidationSummary que configura el resumen de la validación y la manera de mostrar los mensajes de error producidos. Esta etiqueta permite elegir el formato del resumen con las propiedades:
<asp:ValidationSummary runat="server" DisplayMode="SingleParagraph" ID="valSumario" ShowSummary="True" ShowMessageBox="False" Font-Size="10pt" Font-Names="Verdana" HeaderText="<div align=center><u>Se han encontrado los siguientes errores</u>: </div>" />ASP .NET tiene mecanismos para guardar lo capturado en los controles del formulario durante la sesión. Si queremos que lo esrito en las cajas de texto permanezca en ellas aún después de pulsar el botón que envía los datos, debemos configurar la propiedad EnableViewState de los controles TextBox a True, en caso contrario las cajas de texto se vaciarán cada vez que pulsemos el botón.
Código Visual Basic (bloque de declaración de código)
Para finalizar hay que desarrollar el método de Visual Basic que, al pulsar el botón que envía al servidor los datos del formulario, comprueba si la validación ha sido correcta o han surgido errores, para enviarnos a la página web deseada sólo en el primer caso. Este código lo colocamos en la cabecera del documento aspx (se trata, pues, de un bloque muy corto de código). Hay una manera muy sencilla de saber si lo capturado desde el formulario cumple las condiciones de validación mediante la propiedad IsValid del objeto Page que devuelve True si no ha habido errores. Para dirigir al usuario hacia la página requerida se usa el método Response.Redirect que puede llevarnos a una página html o aspx, a diferencia del método Server.Transfer que sólo puede llevarnos a una página aspx.
Sub puedePasar(obj As Object, e As EventArgs) If Page.IsValid Then Response.Redirect("validar2.html") End If End Sub
Y, en la etiqueta del botón que envía los datos, añadimos en la propiedad onclick el nombre del método:
<asp:Button ID="cmdEnviar" CausesValidation="True" Runat="server" Text="Enviar datos" OnClick="puedePasar" ></asp:Button>