Compartir a través de


CustomValidator (Control, referencia general)

Actualización: noviembre 2007

Evalúa el valor de un control de entrada para determinar si supera la lógica de validación personalizada.

<asp:CustomValidator
    AccessKey="string"
    BackColor="color name|#dddddd"
    BorderColor="color name|#dddddd"
    BorderStyle="NotSet|None|Dotted|Dashed|Solid|Double|Groove|Ridge|
        Inset|Outset"
    BorderWidth="size"
    ClientValidationFunction="string"
    ControlToValidate="string"
    CssClass="string"
    Display="None|Static|Dynamic"
    EnableClientScript="True|False"
    Enabled="True|False"
    EnableTheming="True|False"
    EnableViewState="True|False"
    ErrorMessage="string"
    Font-Bold="True|False"
    Font-Italic="True|False"
    Font-Names="string"
    Font-Overline="True|False"
    Font-Size="string|Smaller|Larger|XX-Small|X-Small|Small|Medium|
        Large|X-Large|XX-Large"
    Font-Strikeout="True|False"
    Font-Underline="True|False"
    ForeColor="color name|#dddddd"
    Height="size"
    ID="string"
    OnDataBinding="DataBinding event handler"
    OnDisposed="Disposed event handler"
    OnInit="Init event handler"
    OnLoad="Load event handler"
    OnPreRender="PreRender event handler"
    OnServerValidate="ServerValidate event handler"
    OnUnload="Unload event handler"
    runat="server"
    SetFocusOnError="True|False"
    SkinID="string"
    Style="string"
    TabIndex="integer"
    Text="string"
    ToolTip="string"
    ValidateEmptyText="True|False"
    ValidationGroup="string"
    Visible="True|False"
    Width="size"
/>

Comentarios

El control CustomValidator permite crear un control de validación con lógica de validación personalizada. Por ejemplo, se puede crear un control de validación que compruebe si el valor especificado en un cuadro de texto es un número par.

Los controles de validación siempre realizan la comprobación de validación en el servidor. También tienen una implementación completa en el cliente que permite a los exploradores compatibles con DHTML (como Microsoft Internet Explorer 4.0 ó posterior) realizar la validación en el cliente. La validación en el cliente mejora el proceso de validación ya que se comprueban los datos proporcionados por el usuario antes de enviarlos al servidor. De este modo se pueden detectar los errores en el cliente antes de enviar el formulario y se evita la acción de ida y vuelta de la información necesaria para la validación en el servidor.

Para crear una función de validación de servidor, proporcione un controlador para el evento ServerValidate que realiza la validación. Se puede obtener acceso a la cadena del control de entrada que se va a validar utilizando la propiedad Value del objeto ServerValidateEventArgs que se pasa al controlador de eventos como parámetro. El resultado de la validación se almacena después en la propiedad IsValid del objeto ServerValidateEventArgs.

Para crear una función de validación en el cliente, agregue primero la función de validación en el servidor que se ha descrito anteriormente. A continuación, agregue a la página .aspx la función de script de validación en el cliente.

Si utiliza Visual Basic, la función debe tener el siguiente formato:

Sub ValidationFunctionName (source, arguments)

Si utiliza JScript, la función deberá tener la siguiente forma:

Function ValidationFunctionName (source, arguments)

Utilice la propiedad ClientValidationFunction para especificar el nombre de la función de script de validación de cliente que está asociada al control CustomValidator. Como la función de script se ejecuta en el cliente, debe estar en un lenguaje que el explorador de destino admita, como Visual Basic o JScript.

Al igual que en el caso de la validación en el servidor, la propiedad Value del parámetro arguments obtiene acceso al valor que se va a validar. Para devolver el resultado de la validación, establezca la propiedad IsValid del parámetro arguments.

Nota de seguridad:

Al crear una función de validación de cliente, asegúrese de incluir asimismo la función de validación de servidor. Si crea una función de validación en el cliente sin una función correspondiente en el servidor, código malintencionado podrá omitir la validación.

Se pueden asociar varios controles de validación a un control de entrada individual para validar diferentes criterios. Por ejemplo, se pueden aplicar varios controles de validación a un control TextBox que permite al usuario especificar la cantidad de elementos que se han de agregar a un carrito de la compra. Se puede utilizar un control CustomValidator para garantizar que el valor especificado es menor que la cantidad del inventario y un control RequiredFieldValidator para garantizar que el usuario especifica un valor en el control TextBox.

Nota

Si el control de entrada está vacío, no se llama a ninguna función de validación y la validación se realiza correctamente. Utilice un control RequiredFieldValidator para impedir que el usuario omita un control de entrada.

Es posible utilizar un control CustomValidator sin establecer la propiedad ControlToValidate. Se suele hacer cuando se validan varios controles de entrada o controles de entrada que no se pueden usar con controles de validación, como el control CheckBox. En este caso, la propiedad Value del parámetro arguments pasado al controlador de eventos del evento ServerValidate y a la función de validación en el cliente, siempre contiene una cadena vacía (""). Sin embargo, se sigue llamando a estas funciones de validación en los casos en los que resulte apropiado para determinar la validez en el cliente y en el servidor. Para obtener acceso al valor que se va a validar, es preciso hacer referencia mediante programación al control de entrada que se desea validar y, a continuación, recuperar el valor de la propiedad apropiada. Por ejemplo, para validar un control CheckBox en el servidor, no establezca la propiedad ControlToValidate del control de validación y utilice el siguiente código para el controlador del evento ServerValidate.

Sub ServerValidation (source As object, args As ServerValidateEventArgs)
 
   args.IsValid = (CheckBox1.Checked = True)

End Sub
void ServerValidation (object source, ServerValidateEventArgs args)
{
      
   args.IsValid = (CheckBox1.Checked == true);
   
}

Para obtener más información acerca del control CustomValidator, vea la clase System.Web.UI.WebControls.CustomValidator.

Ejemplos

En el siguiente ejemplo de código se muestra cómo crear un control CustomValidator para validar si el valor especificado en un cuadro de texto es un número par en el servidor. A continuación, se muestra el resultado de validación en la página.

Nota de seguridad:

Estos ejemplos de código contienen cuadros de texto que aceptan datos proporcionados por el usuario, lo que representa una posible amenaza para la seguridad. De forma predeterminada, las páginas Web ASP.NET validan los datos escritos por el usuario para comprobar que no incluyen script ni elementos HTML. Para obtener más información, vea Información general sobre los ataques mediante secuencias de comandos.

<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      Sub ValidateBtn_OnClick(sender As object, e As EventArgs) 
         If Page.IsValid Then 
            lblOutput.Text = "Page is valid."
         Else 
            lblOutput.Text = "Page is not valid!"
         End If
      End Sub
      Sub ServerValidation (source As object, arguments As ServerValidateEventArgs)

         Dim num As Integer = Integer.Parse(arguments.Value)
         arguments.IsValid = ((num mod 2) = 0)
         
      End Sub
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid.";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      void ServerValidation (object source, ServerValidateEventArgs arguments)
      {

         int i = int.Parse(arguments.Value);
         arguments.IsValid = ((i%2) == 0);

      }
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>

En el siguiente ejemplo de código se muestra cómo crear un control CustomValidator que realice la misma rutina de validación que en el anterior ejemplo, pero en el cliente.

<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      Sub ValidateBtn_OnClick(sender As object, e As EventArgs) 
         If Page.IsValid Then 
            lblOutput.Text = "Page is valid."
         Else 
            lblOutput.Text = "Page is not valid!"
         End If
      End Sub
      Sub ServerValidation (source As object, arguments As ServerValidateEventArgs)

         Dim num As Integer = Integer.Parse(arguments.Value)
         arguments.IsValid = ((num mod 2) = 0)
 
      End Sub
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           ClientValidationFunction="ClientValidate"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>
<script language="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      if ((arguments.Value % 2) == 0)
         arguments.IsValid=true;
      else
         arguments.IsValid=false;
   }
   // -->
</script>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid.";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      void ServerValidation (object source, ServerValidateEventArgs arguments)
      {
         
            int i = int.Parse(arguments.Value);
            arguments.IsValid = ((i%2) == 0);

      }
   </script>    
</head>
<body>
   <form runat="server">
      <h3>CustomValidator Example</h3>
      <asp:Label id=lblOutput runat="server" 
           Text="Enter an even number:" 
           Font-Name="Verdana" 
           Font-Size="10pt" /><br>
      <p />
      <asp:TextBox id="Text1" 
           runat="server" />
      &nbsp;&nbsp;
      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           ClientValidationFunction="ClientValidate"
           OnServerValidate="ServerValidation"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Name="verdana" 
           Font-Size="10pt"
           runat="server"/>
      <p />
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>
   </form>
</body>
</html>
<script language="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      if ((arguments.Value % 2) == 0)
         arguments.IsValid=true;
      else
         arguments.IsValid=false;
   }
   // -->
</script>

Vea también

Referencia

CustomValidator

Otros recursos

Sintaxis de los controles de servidor Validation