Freigeben über


CustomValidator-Steuerelement (Allgemeine Referenz)

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

<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"
/>

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 Validierung 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 erweitert den Prozess der Validierung, 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.

Zum Erstellen einer serverseitigen Validierungsfunktion geben Sie einen Handler für das ServerValidate-Ereignis an, das die Validierung durchführt. Auf die zu validierende Zeichenfolge des Eingabesteuerelements kann über die Value-Eigenschaft des ServerValidateEventArgs-Objekts zugegriffen werden, die als Parameter an den Ereignishandler übergeben wird. Das Ergebnis der Validierung wird dann in der IsValid-Eigenschaft des ServerValidateEventArgs-Objekts gespeichert.

Zum Erstellen einer clientseitigen Validierungsfunktion fügen Sie zuerst die oben beschriebene serverseitige Validierungsfunktion hinzu. Anschließend fügen Sie der ASPX‑Seite die Skriptfunktion für die Validierung auf dem Client hinzu.

Bei der Verwendung von Visual Basic 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 mithilfe der ClientValidationFunction-Eigenschaft den Namen der clientseitigen Skriptfunktion für die Validierung 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. Visual Basic oder JScript.

Wie bei der serverseitigen Validierung kann mithilfe der Value-Eigenschaft des arguments-Parameters auf den zu validierenden Wert zugegriffen werden. Das Ergebnis der Validierung wird durch Festlegen der IsValid-Eigenschaft des arguments-Parameters zurückgegeben.

SicherheitshinweisSicherheitshinweis

Stellen Sie beim Entwurf einer clientseitigen Validierungsfunktion sicher, dass Sie die Funktionalität der serverseitigen Validierungsfunktion einbeziehen.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. Sie können z. B. mehrere Validierungssteuerelemente auf ein TextBox-Steuerelement anwenden, mit dem der Benutzer die einem Warenkorb hinzuzufügende Artikelanzahl eingeben kann. Mithilfe eines CustomValidator-Steuerelements können Sie sicherstellen, dass der angegebene Wert niedriger als die Bestandsmenge ist. Mithilfe eines RequiredFieldValidator-Steuerelements stellen Sie sicher, dass der Benutzer im TextBox-Steuerelement einen Wert eingibt.

HinweisHinweis

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.

Das CustomValidator-Steuerelement kann verwendet werden, ohne dass die ControlToValidate-Eigenschaft festgelegt wird. Dies wird normalerweise beim Validieren mehrerer Eingabesteuerelemente oder beim Validieren von Eingabesteuerelementen angewendet, die nicht mit den 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 clientseitige Validierungsfunktion übergeben wird, immer eine leere Zeichenfolge (""). Dennoch werden diese Validierungsfunktionen weiterhin aufgerufen, um sowohl auf dem Server als auch auf dem Client die Gültigkeit 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, legen Sie die ControlToValidate-Eigenschaft des Validierungssteuerelements nicht fest, und verwenden Sie den im Folgenden gezeigten 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
void ServerValidation (object source, ServerValidateEventArgs args)
{
      
   args.IsValid = (CheckBox1.Checked == true);
   
}

Weitere Informationen über das CustomValidator-Steuerelement finden Sie in den Erläuterungen zur System.Web.UI.WebControls.CustomValidator-Klasse.

Beispiele

Das folgende Beispiel veranschaulicht das Erstellen eines CustomValidator-Steuerelements, 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.

SicherheitshinweisSicherheitshinweis

Diese Codebeispiele enthalten Textfelder, die Benutzereingaben akzeptieren. Diese stellen ein potenzielles Sicherheitsrisiko dar.Standardmäßig stellt die ASP.NET-Seite sicher, dass die Benutzereingabe keine Skript- oder HTML-Elemente enthält.Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

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

Das folgende Beispiel veranschaulicht das Erstellen eines CustomValidator-Steuerelements, das die gleiche Validierungsroutine wie das obige Beispiel ausführt. Im Unterschied zum obigen Beispiel erfolgt die Validierung 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="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>

Siehe auch

Referenz

CustomValidator

Weitere Ressourcen

Syntax von Validierungs-Serversteuerelementen