Ovládací prvek CustomValidator (obecná reference)
Vyhodnotí hodnotu vstupního ovládacího prvku pro zjištění, zda projde vlastní logikou ověřování.
<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"
/>
Poznámky
Ovládací prvek CustomValidator umožňuje vytvořit ověřovací ovládací prvek s vlastní logikou ověřování. Můžete například vytvořit ověřovací ovládací prvek, který zkontroluje, zda hodnota zadaná do textového pole je sudé číslo.
Ověřovací ovládací prvky vždy provádí kontrolu ověřování na serveru. Mají také kompletní implementaci na straně klienta, která umožňuje ověřování na straně prohlížečů podporujících DHTML (jako je například Microsoft Internet Explorer 4.0 nebo vyšší). Ověřování na straně klienta vylepšuje proces ověřování kontrolou vstupu před odesláním na server. To umožňuje rozpoznat chyby u klienta před odesláním formuláře, aby se zamezilo přenosu informací nezbytných pro ověřování na straně serveru.
Chcete-li vytvořit funkci ověřování na straně serveru, poskytněte obslužnou rutinu pro událost ServerValidate, která provádí ověření. Řetězec ze vstupního ovládacího prvku pro ověření, je přístupný pomocí vlastnosti Value objektu ServerValidateEventArgs předaného obslužné rutině události jako parametr. Výsledek ověřování je poté uložen ve vlastnosti IsValid objektu ServerValidateEventArgs.
Chcete-li vytvořit funkci ověřování na straně klienta, nejprve přidejte funkci ověřování na straně serveru popsanou výše. Dále přidejte skript funkce ověřování na straně klienta na stránku ASPX.
Pokud používáte Visual Basic, musí být funkce ve formuláři:
Sub ValidationFunctionName (source, arguments)
Pokud používáte jazyk JScript, musí být funkce ve formuláři:
Function ValidationFunctionName (source, arguments)
Použijte vlastnost ClientValidationFunction pro určení názvu funkce skriptu pro ověření spojené s ovládacím prvkem CustomValidator. Protože je funkce skriptu spuštěna v klientském počítači, musí být funkce v jazyce, který podporuje cílový prohlížeč, jako je například Visual Basic nebo JScript.
Podobně jako ověřování na straně serveru, přistupuje k hodnotě pomocí vlastnosti Value parametru arguments, kterou chcete ověřit. Vrací výsledek ověřování nastavením vlastnosti IsValid parametru arguments.
Poznámka k zabezpečení |
---|
Při vytváření funkce ověřování na straně klienta, se přesvědčte, že jste zadali logiku funkce ověřování na straně serveru.Vytvoříte-li funkci ověřování na straně klienta bez odpovídající funkce na straně serveru, je možné, že škodlivý kód obejde ověření. |
Více ověřovacích ovládací prvků může být přidruženo k jednotlivým vstupům ovládacího prvku pro ověření různých kritérií. Například můžete aplikovat více ověřovacích ovládacích prvků na ovládací prvek TextBox, který umožňuje uživateli zadat množství položek, které chce přidat do nákupního košíku. Můžete použít ovládací prvek CustomValidator pro zajištění, aby zadaná hodnota byla nižší než je množství ve skladu a ovládací prvek RequiredFieldValidator pro zajištění, že uživatel zadá hodnotu do ovládacího prvku TextBox.
Poznámka |
---|
Pokud je vstupní ovládací prvek prázdný, není zavolána žádná ověřovací funkce a ověřování je vyhodnoceno jako úspěšné.Abyste zabránili uživateli ve vynechání vstupního ovládacího prvku, použijte ovládací prvek RequiredFieldValidator. |
Je možné použít ovládací prvek CustomValidator bez nastavení vlastnosti ControlToValidate. To se obvykle provádí při ověřování více vstupních ovládacích prvků nebo při ověření vstupních ovládacích prvků, které nelze použít s ověřovacími ovládacími prvky, jakým je například ovládací prvek CheckBox. V tomto případě vlastnost Value parametru arguments předaná obslužné rutině události ServerValidate a funkci ověřování na straně klienta, vždy obsahuje prázdný řetězec (""). Avšak tyto funkce ověřování jsou stále volány, kde je to v hodné, pro určení platnosti na serveru i u klienta. Pro přístup k hodnotě pro ověření, je nutné se programově odkazovat na požadovaný vstupní ovládací prvek a následně načíst hodnotu z odpovídající vlastnosti. Chcete-li například ověřit ovládací prvek CheckBox na serveru, nenastavujte vlastnost ControlToValidate ověřovacího ovládacího prvku a použijte následující kód pro obslužnou rutinu události 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);
}
Další informace o ovládacím prvku CustomValidator, naleznete ve třídě System.Web.UI.WebControls.CustomValidator.
Příklady
Následující příklad kódu ukazuje, jak lze vytvořit ovládací prvek CustomValidator, který ověřuje, zda hodnota zadaná do textového pole na serveru je sudé číslo. Výsledek ověřování je poté zobrazen na stránce.
Poznámka k zabezpečení |
---|
Tyto příklady kódu obsahují textová pole, která přijímají vstup uživatele, který představuje potenciální ohrožení zabezpečení.Ve výchozím nastavení webové stránky technologie ASP.NET ověřují, zda vstup uživatele neobsahuje skript nebo prvky jazyka HTML.Další informace naleznete v tématu Přehled zneužití skriptů. |
<%@ 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>
Následující příklad kódu ukazuje, jak lze vytvořit ovládací prvek CustomValidator, který provádí stejnou ověřovací rutinu, jako předchozí příklad, ale v klientském počítači.
<%@ 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>