Tutorial de ASP.NET
Vista Previa de ASP.NET 2.0

Validando Controles de Entrada de Formularios

 

Lo nuevo de 2.0

  • Grupos de Validación - Podemos asignar un nombre de grupo a un conjunto de validadores para asegurarnos que se produce la validación sólo para controles del grupo especificado. Ésto nos permite tener múltiples grupos de control, que se validan de forma separada, en la misma página.


  • Fijar el Foco en el Error - Mediante la nueva característica de API de Foco de ASP.NET, los validadores se pueden configurar para fijar el foco en su control asociado que queremos validar, cuando se produce un error de validación. El primer control del formulario que tiene un error de validación recibirá el foco cuando se envía el formulario.


  • Valores Invariantes de Regiones - Cuando hacemos conversiones en una propiedad no fuertemente tipada de un validador de comparación (CompareValidator.ValueToCompare, RangeValidator.MaximumValue, RangeValidatos.MinimumValue) el validador usará un formato neutral de región (Fecha:YYYY/MM/DD, Double & Moneda:formato de región US) para hacer la conversión cuando CultureInvariantValues vale "true".


  • Validación de Texto Vacío - La propiedad ValidateEmptyText fija una cuestión clave de CustomValidator. En ASP.NET 1.0 la validación personalizada no funcionaba si el ValidationText estaba vacío. Podemos fijar esta propiedad a "true" para que se produzca la validación personalizada para valores vacíos de entrada.
Este apartado discute estas y otras características de validación en ASP.NET 2.0.


El Framework de Formularios Web incluye un conjunto de controles de servidor de validación que proporcionan una forma sencilla pero poderosa de comprobar los formularios de entrada en busca de errores y, si es necesario, mostrar mensajes al usuario. Los controles de validación se añaden a una página de Formularios Web de la misma forma que el resto de controles. Hay controles para tipos específicos de validación, por ejemplo comprobación de rango o coincidencia con patrones, además de un RequiredFieldValidator que asegura que un usuario no olvide rellenar un campo. Podemos "ligar" más de un control de validación a un control de entrada. Por ejemplo, podríamos especificar tanto que un campo es obligatorio y que debe contener un rango específico de valores.

Los controles de validación trabajan un limitado subconjunto de controles de servidor HTML y Web. Para cada control, una propiedad específica contiene el valor que se validará. La siguiente tabla muestra los controles de entrada que pueden ser validados.

Control Propiedad de Validación
HtmlInputText Value
HtmlTextArea Value
HtmlSelect Value
HtmlInputFile Value
TextBox Text
ListBox SelectedItem.Value
DropDownList SelectedItem.Value
RadioButtonList SelectedItem.Value
FileUpload FileName

Tipos de Controles de Validación

El formulario de validación más sencillo es un campo obligatorio. Si el usuario introduce un valor en el campo, es válido. Si todos los campos de la página son válidos, la página es válida. El siguiente ejemplo muestra el uso de RequiredFieldValidator.

C# RequiredFieldValidator



También hay controles de validación para tipos específicos de validación, cómo control de rango o coincidencia con un patrón. La siguiente tabla muestra los controles de validación.

Nombre del Control Descripción
RequiredFieldValidator Asegura que el usuario no se deja un campo
CompareValidator Compara los datos que introduce el usuario con una constante o el valor de una propiedad de otro control  mediante un operador de comparación (menor que, igual que, mayor que, etc.).
RangeValidator Comprueba que la entrada del usuario se encuentra entre un límite superior y otro inferior. Podemos comprobar los rangos con parejas de números, caracteres alfabéticos o fechas. Los límites se pueden expresar como constantes.
RegularExpressionValidator Comprueba que la entrada sigua un patrón definido como una expresión regula. Este tipo de validación nos permite comprobar secuencias predecibles de caracteres, tales como números de seguridad social, dirección de e-amil, números de teléfono, códigos postales, etc.
CustomValidator Comprueba la entrada de usuario mediante lógica de validación que hemos programado nosotros. Este tipo de validación nos permite comprobar valores obtenidos en tiempo de validación.
ValidationSummary Muestra los errores de validación en un formulario resumen para todos los validadores de la página.

Validación del Lado Cliente

Los controles de validación siempre realizan operaciones de validación comprobando en el código del servidor. Sin embargo, si el usuario trabajo con un navegador que soporta DHTML, los controles de validación pueden realizar la validación mediante scripts de cliente. Con la validación del lado del cliente, cualquier error se detecta en el cliente cuando se envía el formulario al servidor. Si cualquiera de los validadores encuantra un error, el envío del formulario al servidor se cancela y se muestra la propiedad Text del validador. Ésto permite al usuario corregir la entrada antes de enviar el formulario al servidor. Los valores de los campos se revalidan cuando el campo que contenía el error pierde el foco, proporcionando así una experiencia rica e interactiva de validación al usuario.

Observad que el Framework de Páginas de Formularios Web siempre realiza la validación en el servidor, incluso cuando ya se ha hecho en el cliente. Ésto nos ayuda a impedir que los usuarios puedan saltarse la validación haciéndose pasar por otro usuario o una transacción préviamente aprobada.

La validación del lado del cliente está permitida por defecto. Si el cliente lo permite, la validación de nivel superior se realizará de forma automática. Para deshabilitar la validación del lado del cliente, estableceremos la propiedad ClientTarget de la página a "Downlevel" ("Uplevel" fuerza la validación del lado cliente). De forma alternativa, podemos establecer la propiedad EnableClientScript de un control de validación a "false" para deshabilitar la validación del lado cliente para dicho control.

C# Validación del Lado Cliente


Mostrando Errores de Validación

Cuando se procesa una entrada de usuario (por ejemplo, al enviar un formulario), el Framework de Páginas de Formularios Web pasa la entrada de usuario al control o controles de validación. Los controles de validación testean las entradas del usuario y establecen una propiedad para indicar si la entrada ha pasado el test de validación. Después de procesarse todos los controles de validación, la propiedad IsValid de la página se establece; si alguno de los controles muestra un fallo de validación, la página entera se marca como inválida.

Si un control de validción da un error, dicho control mostrará un mensaje de error en la página o en un control ValidationSummary en cualquier otro lugar de la página. El control ValidationSummary se muestra cuando la propiedad IsValid de la página está establecida a "false". Sondea el resto de controles de validación de la página y agrega el texto que cada uno muestra. En el siguiente ejemplo vemos cómo mostrar errores con un control ValidationSummary.

C# ValidationSummary


Trabajando con CompareValidator

El control de servidor CompareValidator compara los valores de dos controles. CompareValidator utiliza tres propiedades clave para realizar su validación. ControlToValidate y ControlToCompare contienen los valores a comparar. Operator define el tipo de comparación a realizar (por ejemplo Igual o Diferente). CompareValidator realiza la validación mediante la evaluación de estas propiedades como una expresión, de la siguiente manera:

         ( ControlToValidate ControlToCompare )

Si el resultado de la validación es "true", el resultado de validación es válido. Podemos especificar opcionalmente la propiedad ValueToCompare para realizar la comparación con un valor estático, en lugar de ControlToCompare.

El control de servidor CompareValidator también puede utilizarse para realizar la validación de Datatype. Por ejemplo, si la información de la fecha de nacimiento se tiene que recoger de la página de registro del usuario, el control CompareValidator se puede utilizar para asegurarnos que la fecha tiene un formato reconocido, antes de que se envíe a la base de datos.

El siguiente ejemplo muestra cómo utilizar el control CompareValidator.

C# CompareValidator


Trabajando con RangeValidator

El control de servidor RangeValidator comprueba si un valor de entrada se encuentra dentro de un determinado rango. RangeValidator utiliza tres propiedades clave para realizar su validación. ControlToValidate contiene el valor a validar. MinimumValue y MaximumValue definen los valores mínimo y máximo del rango válido.

Este ejemplo muestra el uso del control RangeValidator.

C# RangeValidator


Trabajando con Expresiones Regulares

El control de servidor RegularExpressionValidator comprueba que una entrada coincida con un determiado patrón definido por una expresión regular. Este tipo de validación nos permite comprobar secuencias predecibles de carácteres, como números de la seguridad social, direcciones de e-mail, números de teléfono, códigos postales, etc.

RegularExpressionValidator utiliza dos propiedades clave para realizar la validación. ControlToValidate contiene el valor a validar. ValidationExpression contiene la expresión regular con la que tiene que coincidir.

Estos ejemplos muestran el uso del control RegularExpressionValidator.

C# RegularExpressionValidator



C# RegularExpressionValidator 2

Realizando Validación Personalizada

El control de servidor CustomValidator llama a una función definida por el usuario para realizar validaciones que los validadores estándar no pueden llevar a cabo. La función personalizada se puede ejecutar en el servidor o en un script del lado del cliente, por ejemplo JScript o VBScript. Para la validación personalizada en el lado del cliente, el nombre de la función debe definirse en la propiedad ClientValidationFunction. Dicha función debe tener la forma  function myvalidator(source, arguments). Observad que source es el objeto CustomValidator del lado cliente, y arguments es un objeto con dos propiedades, Value y IsValid. La propiedad Value es el valor que tendremos que validar y la propiedad IsValid es un Boolean en el que se dovolverá el resultado de la validación.

Para validación personalizada del lado del servidor, tendremos que poner nuestra validación en el delegado de OnServerValidate del validador.

El siguiente ejemplo muestra cómo utilizar el control CustomValidator.

C# Custom Validator

ValidateEmptyText Nuevo en 2.0

La propiedad ValidateEmptyText, nueva en ASP.NET 2.0, soluciona un problema con CustomValidator. En ASP.NET 1.0, la validación personalizada no se ejecutaba si el texto de ControlToValidate estaba vacío. Podemos fijar esta propiedad a "true" para hacer que la validación personalizada se realice para valores de entrada vacíos.

Validation Groups Nuevo en 2.0

La propiedad ValidationGroup se utiliza cuando el usuario quiere tener escenarios de validación diferentes en la misma página. Estableceremos el nombre del grupo en el validador y en el botón o en otro control "postback" que cause la validación. Ésto es útil con controles Wizard, MultiView o controles de datos (edición). Por defecto, todos los validadores se encuentran en el grupo "" (grupo por defecto), para compatibilidad hacía atrás (con versiones anteriores). Page nos proporciona además los métodos GetValidators("group") y Validate("group"). Page.IsValidrefleja la validez de todos los controles (acumulativa) que han sido llamados a Validate .

El siguiente ejemplo muestra la propiedad ValidationGroup. Para ver su comportamiento, haced clic en el primet botón (Search) de la página, después haced clic en el segundo botón. Observad que se ejecutan un grupo de validadores diferente en cada clic.

C# Validation Groups

SetFocusOnError Nuevo en 2.0

Otra característica nueva de ASP.NET 2.0 es SetFocusOnError que se establece en controles de validación y hace que el primer control inválido reciba el foco. Para más información sobre SetFocusOnError acudid al tópico Focus API de la sección Tips and Tricks.

Un Formulario Típico de Validación

Este ejemplo muestra un formulario típico de registro, utilizando las variaciones de validación que hemos explicado en este capítulo.

C# Validation Form