CustomValidator-Steuerelement (Allgemeine Referenz)
Aktualisiert: November 2007
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 stellen Sie einen Handler für das ServerValidate-Ereignis bereit, das die Validierung ausführt. Der Zugriff auf die Zeichenfolge aus dem zu validierenden Eingabesteuerelement erfolgt mithilfe der Value-Eigenschaft des ServerValidateEventArgs-Objekts, das als Parameter an den Ereignishandler übergeben wird. Das Validierungsergebnis wird anschließend 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.
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.
![]() |
---|
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. 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. Mithilfe 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.
Tipp
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. Diese Vorgehensweise ist beim Validieren mehrerer Eingabesteuerelemente oder beim Validieren von Eingabesteuerelementen üblich, 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 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.
![]() |
---|
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" />
<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" />
<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" />
<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" />
<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>