Share via


CustomValidator (Control, referencia general)

[Esta documentación se proporciona solo para fines preliminares y está sujeta a cambios en versiones posteriores. Se incluye temas en blanco como marcadores].

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 en el servidor, proporcione un controlador para el evento ServerValidate que realice la validación. El acceso a la cadena del control de entrada que se va a validar es posible mediante la propiedad Value del objeto ServerValidateEventArgs que se pasa al controlador de eventos como parámetro. Después, el resultado de la validación se almacena en la propiedad IsValid del objeto ServerValidateEventArgs.

Para crear una función de validación en el cliente, primero se debe agregar la función de validación en el servidor anteriormente descrita. 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 seguridadNota sobre la 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 puede aplicar varios controles de validación a un control TextBox de modo que el usuario pueda especificar la cantidad de elementos que se han de agregar a un carro de la compra. Se puede utilizar un control CustomValidator para garantizar que el valor especificado es inferior a 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. Normalmente se hace cuando se están validando varios controles de entrada o controles de entrada que no se pueden utilizar con controles de validación, como por ejemplo, el control CheckBox. En ese caso, la propiedad Value del parámetro arguments, que se pasa al controlador de eventos para el 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 hay que establecer la propiedad ControlToValidate del control de validación, mientras que hay que utilizar el siguiente código del controlador para el 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 seguridadNota sobre la 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 ASP.NET Web Pages validan los datos escritos por el usuario para comprobar que no incluyen script ni elementos HTML.Para obtener más información, vea Script Exploits Overview.

<%@ 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