Freigeben über


CustomValidator-Steuerelement

Evaluiert den Wert eines Eingabesteuerelements, um festzustellen, ob er der benutzerdefinierten Validierungslogik entspricht.

<asp:CustomValidator 
     id="ProgrammaticID" 
     ControlToValidate="programmatic ID of Server Control to Validate"
     ClientValidationFunction="ClientValidateID"
     OnServerValidate="ServerValidateID"
     ErrorMessage="Message to display in ValidationSummary control"
     Text="Message to display in control" 
     ForeColor="value" 
     BackColor="value" ... 
     runat="server" >
</asp:CustomValidator>

Hinweise

Mit dem CustomValidator-Steuerelement können Sie ein Validierungssteuerelement mit benutzerdefinierter Validierungslogik erstellen. Sie können z. B. ein Validierungssteuerelement erstellen, das überprüft, ob der in einem Textfeld eingegebene Wert eine gerade Zahl ist.

Validierungssteuerelemente führen die Gültigkeitsprüfung stets auf dem Server aus. Sie verfügen außerdem über vollständige Clientimplementierung, was Browsern mit DHTML-Unterstützung wie Microsoft Internet Explorer, Version 4.0 oder höher, ermöglicht, die Validierung auf dem Client durchzuführen. Die Validierung auf dem Client verbessert den Prozess der Gültigkeitsprüfung, da hierbei Benutzereingaben vor dem Senden an den Server überprüft werden. Auf diese Weise werden Fehler auf dem Client vor dem Senden des Formulars entdeckt, wodurch die für die Validierung auf dem Server erforderliche Informationsschleife vermieden wird.

Um eine Funktion für die Validierung auf dem Server zu programmieren, stellen Sie einen Handler für das ServerValidate-Ereignis bereit, das die Validierung ausführt. Auf die Zeichenfolge aus dem zu validierenden Eingabesteuerelement kann mit Hilfe der Value-Eigenschaft des ServerValidateEventArgs-Objekts zugegriffen werden, das als Parameter an den Ereignishandler übergeben wird. Das Ergebnis der Validierung wird dann in der IsValid-Eigenschaft des ServerValidateEventArgs-Objekts gespeichert.

Um eine Funktion für die Validierung auf dem Client zu erstellen, fügen Sie zuerst die oben beschriebene Funktion für die Validierung auf dem Server hinzu. Anschließend fügen Sie der ASPX-Seite die Skriptfunktion für die Validierung auf dem Client hinzu.

Wenn Sie VBScript verwenden, muss die Funktion in folgendem Format angegeben werden:

Sub ValidationFunctionName (source, arguments) 

Wenn Sie JScript verwenden, geben Sie die Funktion in folgendem Format an:

Function ValidationFunctionName (source, arguments)

Geben Sie mit Hilfe der ClientValidationFunction-Eigenschaft den Namen der Skriptfunktion für die Validierung auf dem Client an, die mit dem CustomValidator-Steuerelement verknüpft ist. Da die Skriptfunktion auf dem Client ausgeführt wird, muss sie in einer Sprache geschrieben werden, die der Zielbrowser unterstützt, z. B. VBScript oder JScript.

Wie bei der Validierung auf dem Server kann mit Hilfe der Value-Eigenschaft des arguments-Parameters auf den zu validierenden Wert zugegriffen werden. Das Ergebnis der Validierung wird durch Setzen der IsValid-Eigenschaft des arguments-Parameters zurückgegeben.

**Vorsicht   **Achten Sie beim Erstellen einer Funktion für die Validierung auf dem Client darauf, auch die Merkmale der Funktion für die Validierung auf dem Server zu integrieren. Wenn Sie eine Funktion für die Validierung auf dem Client ohne eine entsprechende Funktion für die serverseitige Validierung erstellen, kann schädigender Code die Validierung umgehen.

Mehrere Validierungssteuerelemente können mit einem einzelnen Eingabesteuerelement verknüpft werden, um verschiedene Kriterien zu validieren. So können Sie z. B. mehrere Validierungssteuerelemente für ein TextBox-Steuerelement verwenden, in dem der Benutzer die Menge der Artikel eingeben kann, die einem Warenkorb hinzugefügt werden sollen. Mit Hilfe eines CustomValidator-Steuerelements können Sie sicherstellen, dass der angegebene Wert unter der Warenbestandsmenge liegt, und mit einem RequiredFieldValidator-Steuerelement können Sie gewährleisten, dass der Benutzer im TextBox-Steuerelement einen Wert eingibt.

Hinweis   Wenn das Eingabesteuerelement leer ist, werden keine Validierungsfunktionen aufgerufen, und die Validierung wird erfolgreich durchgeführt. Verwenden Sie ein RequiredFieldValidator-Steuerelement, um zu verhindern, dass der Benutzer ein Eingabesteuerelement überspringt.

Sie können ein CustomValidator-Steuerelement verwenden, ohne die ControlToValidate-Eigenschaft zu setzen. Diese Vorgehensweise ist beim Validieren von mehreren Eingabesteuerelementen üblich oder beim Validieren von Eingabesteuerelementen, die nicht mit Validierungssteuerelementen verwendet werden können, z. B. beim CheckBox-Steuerelement. In diesem Fall enthält die Value-Eigenschaft des arguments-Parameters, der an den Ereignishandler für das ServerValidate-Ereignis und an die Funktion für die Validierung auf dem Client übergeben wird, immer eine leere Zeichenfolge (""). Dennoch werden diese Validierungsfunktionen ggf. aufgerufen, um die Gültigkeit sowohl auf dem Server als auch auf dem Client zu überprüfen. Um auf den zu validierenden Wert zuzugreifen, müssen Sie programmgesteuert auf das zu validierende Eingabesteuerelement verweisen und dann den Wert aus der betreffenden Eigenschaft abrufen. Um beispielsweise ein CheckBox-Steuerelement auf dem Server zu validieren, setzen Sie die ControlToValidate-Eigenschaft des Validierungssteuerelements nicht und verwenden folgenden Code für den Handler für das ServerValidate-Ereignis:

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

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

Weitere Informationen zum CustomValidator-Steuerelement finden Sie unter CustomValidator-Klasse.

Beispiele

Das folgende Beispiel veranschaulicht, wie Sie ein CustomValidator-Steuerelement erstellen, das überprüft, ob der in einem Textfeld eingegebene Wert auf dem Server eine gerade Zahl ist. Das Ergebnis der Validierung wird anschließend auf der Seite ausgegeben.

<%@ 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>
[C#]
<%@ 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>

Das folgende Beispiel veranschaulicht, wie Sie ein CustomValidator-Steuerelement erstellen, das die gleiche Validierungsroutine wie das obige Beispiel ausführt, jedoch auf dem Client.

<%@ 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="vbscript">
   <!--
   Sub ClientValidate(source, arguments)
      If (arguments.Value mod 2) = 0 Then
         arguments.IsValid=true
      Else
         arguments.IsValid=false
      End If
   End Sub
   ' -->
</script>
[C#]
<%@ 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="vbscript">
   Sub ClientValidate(source, arguments)
      If (arguments.Value mod 2) = 0 Then
         arguments.IsValid=true
      Else
         arguments.IsValid=false
      End If
   End Sub
</script>
[JScript]
<%@ Page Language="JScript" AutoEventWireup="True" %>
<html>
<head>
   <script runat="server">
      function ValidateBtn_OnClick(sender:Object, e:EventArgs) : void 
      {
         if (Page.IsValid) 
         {
            lblOutput.Text = "Page is valid!";
         }
         else 
         {
            lblOutput.Text = "Page is not valid!";
         }
      }
      function ServerValidation(sender:Object, value:ServerValidateEventArgs) : void 
      {

         var i:int = Int32.Parse(value.Value);
         value.IsValid = (i%2 == 0); 
         return;    
         
      }
   </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>

Siehe auch

CustomValidator-Klasse | Validierungsserversteuerelemente