Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta sección se trata la validación en el área de trabajo de una página ASP.NET y se explica cómo crear una biblioteca de controles de validación propia.
En general, la validación implica comprobar datos especificados por un usuario. Sin embargo, también puede conllevar otros tipos de comprobación de errores. Con el fin de proporcionar una abstracción que abarque a los diversos escenarios en los que se requiere validación, .NET Framework define la interfaz System.Web.UI.IValidator, que incluye los miembros siguientes:
public interface IValidator
{
void Validate();
string ErrorMessage {get; set;}
bool IsValid {get; set;}
}
[Visual Basic]
Public Interface IValidator
Sub Validate()
Property ErrorMessage As String
Property IsValid As Boolean
End Interface
El método Validate contiene la lógica de comprobación de errores y establece la propiedad IsValid. La propiedad ErrorMessage contiene una cadena de error especificada por el programador de la página.
La clase Page expone la propiedad Validators, que es una lista de todos los tipos IValidator de la página. Cualquier clase que implemente la interfaz IValidator se considera un validador y se puede agregar a la propiedad Validators de la página que la contiene. La página hace un seguimiento del estado de error de sus validadores y actualiza su propio estado de error general en consecuencia.
Los tipos de validadores más comunes son los controles validadores que procesan la interfaz de usuario en el cliente para señalar los errores de introducción de datos. Para obtener información acerca de los controles validadores incluidos en .NET Framework SDK, vea Tutorial de ASP.NET —> Formularios Web Forms ASP.NET —> Validación de formularios de controles de servidor. En la lista siguiente se resumen las características de los controles de validación de .NET Framework, cosa que puede ser útil para crear una biblioteca de controles de validación:
- Los controles validadores son independientes de los controles a los que validan. Para participar en la validación, un control de servidor debe marcar con el atributo ValidationPropertyAttribute la propiedad que se va a validar con el fin de exponerla.
- Se pueden asociar varios controles de validación a un mismo control de introducción de datos.
- El programador de la página puede personalizar la apariencia y el mensaje de error del control de validación.
- Los controles de validación pueden usar secuencias de comandos y realizar las mismas comprobaciones de errores en los clientes (de alto nivel) que en el servidor.
- En los clientes de alto nivel, los controles de validación indican los errores de introducción de datos sin necesidad de hacer un viaje de ida y vuelta al servidor. Los errores de validación de campos individuales se muestran en el cliente en cuanto el usuario pasa a otro campo y los errores de validación del campo requerido y de resumen se muestran cuando el usuario envía el formulario.
- Los programadores de páginas pueden escribir secuencias de comandos de cliente que complementen o reemplacen la comprobación de errores realizada en el cliente por un control de validación.
La funcionalidad de validación más común se encuentra en la clase base abstracta System.Web.UI.WebControls.BaseValidator, que implementa la interfaz IValidator, registra las secuencias de comandos de cliente en la página y proporciona la lógica de procesamiento básica. Las clases validadoras concretas, como RequiredFieldValidator, RegularExpressionValidator y CustomValidator se derivan de BaseValidator y agregan su funcionalidad específica. El control ValidationSummary ofrece un resumen de los mensajes de error de validación. ValidationSummary no es un validador en sí (no implementa la interfaz IValidator) y se deriva de WebControl. ValidationSummary toma de la colección Validators de la página el mensaje de error de cada validador registrado con la página.
Si se tiene instalado .NET Framework SDK o Visual Studio .NET, se podrá ver la biblioteca de secuencias de comandos que emite BaseValidator si se observa el archivo del directorio raíz virtual aspnet_client/system_web/<versión de SDK instalada>. Para obtener información sobre cómo emitir secuencias de comandos de cliente, vea Funcionalidad de un control de servidor en el cliente.
En los párrafos siguientes se describen los pasos clave para desarrollar un control de validación que proporcione una funcionalidad de validación básica. Sígalos si desea crear un control de validación básico para una biblioteca de validadores personalizados o un control validador personalizado que proporcione toda la funcionalidad de validación necesaria. No es necesario que implementar estos pasos si lo que se desea es algo más sencillo, como extender un validador existente. Para estos casos, vea los ejemplos que extienden un validador base en Ejemplos de controles de validación.
Para implementar un validador
Nota Los pasos del 1 al 4 de la lista siguiente son comunes a todos los validadores, incluidas las clases de validación en el servidor que no son controles. Los pasos del 5 al 10 son para los controles que proporcionan una interfaz de usuario y emiten secuencias de comandos de cliente.
Defina una clase que implemente IValidator. Si el validador es un control, además debe derivarse directa o indirectamente de Control. Los controles validadores de .NET Framework se derivan de System.Web.UI.WebControls.Label, como se muestra en el ejemplo siguiente.
public abstract class BaseDomValidator : Label, IValidator {...} [Visual Basic] MustInherit Public Class BaseDomValidator Inherits Label Implements IValidator ... End ClassNota Excepto en el caso de que el validador vaya a ser una clase base, no es necesario que sea abstracto.
Implemente el contrato de IValidator. En el ejemplo siguiente se muestra cómo puede implementar IValidator. Vea también el Ejemplo de control de validación base.
public string ErrorMessage { get { object o = ViewState["ErrorMessage"]; return((o == null) ? String.Empty : (string)o); } set { ViewState["ErrorMessage"] = value; } } public bool IsValid { get { return isValid; } set { isValid = value; } } public void Validate() { ... // A base validator cannot supply all the validating logic. // You can implement common functionality here and invoke an // abstract method that is overridden by derived classes to // provide validation logic. IsValid = EvaluateIsValid(); } // This method is overridden by a concrete class that extends // the base validator to supply specific validation logic. protected abstract bool EvaluateIsValid(); [Visual Basic] Public Property ErrorMessage() As String Implements IValidator.ErrorMessage Get Dim o As Object = ViewState("ErrorMessage") If o Is Nothing Then Return String.Empty Else Return CStr(o) End If End Get Set ViewState("ErrorMessage") = value End Set End Property Public Property IsValid() As Boolean Implements IValidator.IsValid Get Return _isValid End Get Set _isValid = value End Set End Property Public Sub Validate() Implements IValidator.Validate ... ' A base validator cannot supply all the validating logic. ' You can implement common functionality here and invoke an ' abstract method that is overridden by derived classes to ' provide validation logic. IsValid = EvaluateIsValid() End Sub ' This method is overridden by a concrete class that extends ' the base validator to supply specific validation logic. Protected MustOverride Function EvaluateIsValid() As BooleanAgregue el validador a la propiedad Validators de la página que lo contiene cuando se inicializa la página; para ello reemplace el método OnInit de este modo:
protected override void OnInit(EventArgs e) { base.OnInit(e); Page.Validators.Add(this); } [Visual Basic] Protected Overrides Sub OnInit(e As EventArgs) MyBase.OnInit(e) Page.Validators.Add(Me) End SubNota Si el validador no es un control, el programador de la página debe incluir este paso en el método Page_Load.
Quite el validador de la propiedad Validators de la página cuando ésta se descargue; para ello, reemplace el método OnUnload como sigue:
protected override void OnUnload(EventArgs e) { if (Page != null) { Page.Validators.Remove(this); } base.OnUnload(e); } [Visual Basic] Protected Overrides Sub OnUnload(e As EventArgs) If Not (Page Is Nothing) Then Page.Validators.Remove(Me) End If MyBase.OnUnload(e) End SubNota Si el validador no es un control, el programador de la página debe incluir este paso en el método Page_Unload.
Defina una propiedad que permita al usuario asociar un control de introducción de datos con el validador. En los controles validadores de ASP.NET, esta propiedad es ControlToValidate y se define como se muestra en el Ejemplo de control de validación base.
Defina una propiedad que permita al usuario elegir si el control debe o no emitir secuencias de comandos de cliente. En los controles validadores de ASP.NET, esta propiedad es EnableClientScript y se define como se muestra en Ejemplo de control de validación base.
Prepare la biblioteca de secuencias de comandos de cliente para incluirla en el mismo paquete que el control validador y colóquela en el directorio correspondiente del servidor, para que otras aplicaciones puedan usarla y no se produzcan conflictos de versiones. Para obtener información más detallada, vea la explicación de Funcionalidad de un control de servidor en el cliente. Para consultar un ejemplo de biblioteca de secuencias de comandos, vea Biblioteca de secuencias de comandos para ejemplo de control de validación.
Invoque los métodos de Page que emiten secuencias de comandos de cliente. Para obtener información más detallada, vea la explicación de Funcionalidad de un control de servidor en el cliente y el ejemplo de Ejemplo de control de validación base. Estos métodos para las secuencias de comandos se invocan desde los métodos PreRender y Render.
Reemplace los métodos AddAttributestoRender y Render para implementar la lógica de procesamiento. Para obtener un ejemplo, vea la implementación de Ejemplo de control de validación base.
Todos los pasos indicados aquí se implementan en Ejemplo de control de validación base.
Vea también
Ejemplos de controles de validación | Funcionalidad de un control de servidor en el cliente