閱讀此文請先查看網頁教學網的:ASP.NET入門教程:Validation服務器控件,簡單講述了Web服務器控件的使用方法。
CustomValidator 控件可對輸入控件執行用戶定義的驗證。計算輸入控件的值以確定它是否通過自定義的驗證邏輯。
規定用於驗證的自定義客戶端腳本函數的名稱。
注釋:腳本必須用浏覽器支持的語言編寫,比如 VBScript 或 JScript
使用 VBScript 的話,函數必須位於表單中:
Sub FunctionName (source, arguments)
使用 JScript 的話,函數必須位於表單中:
Function FunctionName (source, arguments)
ControlToValidate 要驗證的輸入控件的 id。 Display驗證控件中錯誤信息的顯示行為。
合法的值有:
驗證失敗時 ValidationSummary 控件中顯示的錯誤信息的文本。
注釋:如果設置了 ErrorMessage 屬性但沒有設置 Text 屬性,則驗證控件中也將顯示 ErrorMessage 屬性的值。
ForeColor 控件的前景色。 id 控件的唯一 id。 IsValid 布爾值,該值指示關聯的輸入控件是否通過驗證。 OnServerValidate 規定被執行的服務器端驗證腳本函數的名稱。 runat 規定該控件是服務器控件。必須設置為 "server"。 Text 當驗證失敗時顯示的文本。<asp:CustomValidator
AccessKey="string"
AssociatedControlID="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"
/>
備注:CustomValidator 控件允許您用自定義的驗證邏輯創建驗證控件。例如,可以創建一個驗證控件,該控件檢查在文本框中輸入的值是否為偶數。
驗證控件總是在服務器上執行驗證檢查。它們還具有完整的客戶端實現,該實現允許支持 DHTML 的浏覽器(如 Microsoft Internet Explorer 4.0 或更高版本)在客戶端執行驗證。客戶端驗證通過在向服務器發送用戶輸入前檢查用戶輸入來增強驗證過程。這使得在提交窗體前即可在客戶端檢測到錯誤,從而避免了服務器端驗證所需要的信息的來回傳遞。
若要創建服務器端驗證函數,請為執行驗證的 ServerValidate 事件提供處理程序。通過將 ServerValidateEventArgs 對象的 Value 屬性作為參數傳遞到事件處理程序,可以訪問來自要驗證的輸入控件的字符串。驗證結果隨後將存儲在 ServerValidateEventArgs 對象的 IsValid 屬性中。
若要創建一個客戶端驗證函數,首先添加先前描述的服務器端驗證函數。然後,將客戶端驗證腳本函數添加到 .aspx 頁中。
如果正在使用 Visual Basic,則該函數必須采用以下形式:
Sub ValidationFunctionName (source, arguments)
如果正在使用 JScript,則該函數必須采用以下形式:
Function ValidationFunctionName (source, arguments)
使用 ClientValidationFunction 屬性指定與 CustomValidator 控件相關聯的客戶端驗證腳本函數的名稱。由於腳本函數在客戶端執行,該函數必須使用目標浏覽器所支持的語言,如 Visual Basic 或 JScript。
與服務器端驗證類似,使用 arguments 參數的 Value 屬性訪問要驗證的值。通過設置 arguments 參數的 IsValid 屬性來返回驗證結果。
警告:創建客戶端驗證函數時,請務必同時包括服務器端驗證函數的功能。如果創建客戶端驗證函數時不存在相應的服務器端函數,則惡意代碼可能會繞過驗證。
多個驗證控件可以同單個輸入控件相關聯,以驗證不同的判據。例如,可將多個驗證控件應用於 TextBox 控件,該控件使用戶可以輸入要添加到購物車中的商品數量。可以使用 CustomValidator 控件確保指定的值小於商品目錄中的數量,並使用 RequiredFieldValidator 控件確保用戶向 TextBox 控件輸入值。
注意:如果輸入控件為空,則不調用任何驗證函數且驗證成功。使用 RequiredFieldValidator 控件防止用戶跳過某個輸入控件。
不設置 ControlToValidate 屬性也可以使用 CustomValidator 控件。當驗證多個輸入控件或驗證無法與驗證控件一起使用的輸入控件(如 CheckBox 控件)時,通常這樣做。在這種情況下,arguments 參數(該參數傳遞給 ServerValidate 事件的事件處理程序並傳遞給客戶端驗證函數)的 Value 屬性總是包含一個空字符串 ("")。但是,仍在適當的位置調用這些驗證函數,以確定服務器和客戶端上的有效性。若要訪問要驗證的值,必須以編程方式引用要驗證的輸入控件,然後從適當的屬性中檢索該值。例如,若要在服務器上驗證 CheckBox 控件,請不要設置驗證控件的 ControlToValidate 屬性,並且為 ServerValidate 事件的處理程序使用以下代碼:
Visual Basic
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);
}
下面的代碼示例演示如何創建一個用於在服務器上驗證在文本框中輸入的值是否為偶數的 CustomValidator 控件。驗證結果隨後顯示在頁上。
Visual Basic
<%@ 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>
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" />
<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>
下面的代碼示例仍是說明如何創建一個 CustomValidator 控件,該控件執行的驗證例程與上例相同,但執行位置是在客戶端上。
Visual Basic
<%@ 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>
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" />
<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>