CustomValidator 控制項 (一般參考)
評估輸入控制項的值,以判斷它是否通過自訂的驗證邏輯。
<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"
/>
備註
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 控制項來避免使用者略過輸入控制項。 |
您可以使用 CustomValidator 控制項,而不需要設定 ControlToValidate 屬性。 通常在驗證多個輸入控制項,或驗證無法與驗證控制項 (例如 CheckBox 控制項) 一起使用的輸入控制項的時候,可以執行這個動作。 在這種情況下,傳遞到 ServerValidate 事件之事件處理常式和傳遞到用戶端驗證函式中的 arguments 參數的 Value 屬性永遠會包含空字串 ("")。 不過,這些驗證函式仍會在適當的位置呼叫,以判斷伺服器和用戶端的有效性。 若要存取要驗證的值,您必須以程式設計方式參考要驗證的輸入控制項,然後從適當屬性中擷取值。 例如,若要在伺服器上驗證 CheckBox 控制項,請不要設定驗證控制項的 ControlToValidate 屬性,並請為 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);
}
如需 CustomValidator 控制項的詳細資訊,請參閱 System.Web.UI.WebControls.CustomValidator 類別。
範例
下列程式碼範例示範如何建立 CustomValidator 控制項,以驗證在伺服器上輸入至文字方塊中的值是否為偶數。 驗證結果然後會被顯示在網頁上。
![]() |
---|
這些程式碼範例包含可接受使用者輸入的文字方塊,這可能會造成安全性威脅。根據預設,ASP.NET 網頁會驗證該使用者的輸入內容中沒有包含指令碼或 HTML 項目。如需詳細資訊,請參閱指令碼攻擊概觀。 |
<%@ 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>
下列程式碼範例示範如何建立 CustomValidator 控制項,此控制項會執行與上述範例一樣的驗證常式,不過是在用戶端上進行。
<%@ 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>