CustomValidator 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在輸入控制項上執行使用者定義的驗證。
public ref class CustomValidator : System::Web::UI::WebControls::BaseValidator
public class CustomValidator : System.Web.UI.WebControls.BaseValidator
type CustomValidator = class
inherit BaseValidator
Public Class CustomValidator
Inherits BaseValidator
- 繼承
範例
下列程式代碼範例示範如何建立伺服器端 CustomValidator 控件。
重要
這個範例有一個可接受使用者輸入的文字方塊,這可能會造成安全性威脅。 根據預設,ASP.NET Web 網頁會驗證使用者輸入未包含指令碼或 HTML 項目。 如需詳細資訊,請參閱 Script Exploits Overview (指令碼攻擊概觀)。
<%@ Page Language="C#" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>CustomValidator ServerValidate Example</title>
<script runat="server">
void ValidateBtn_OnClick(object sender, EventArgs e)
{
// Display whether the page passed validation.
if (Page.IsValid)
{
Message.Text = "Page is valid.";
}
else
{
Message.Text = "Page is not valid!";
}
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
// Test whether the value entered into the text box is even.
int i = int.Parse(args.Value);
args.IsValid = ((i%2) == 0);
}
catch(Exception ex)
{
args.IsValid = false;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Names="Verdana"
Font-Size="10pt"
runat="server"
AssociatedControlID="Text1"/>
<br />
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Names="verdana"
Font-Size="10pt"
OnServerValidate="ServerValidation"
runat="server"/>
<br />
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</form>
</body>
</html>
<%@ Page Language="VB" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>CustomValidator ServerValidate Example</title>
<script runat="server">
Sub ValidateBtn_OnClick(sender As Object, e As EventArgs)
' Display whether the page passed validation.
If Page.IsValid Then
Message.Text = "Page is valid."
Else
Message.Text = "Page is not valid!"
End If
End Sub
Sub ServerValidation(source As Object, args As ServerValidateEventArgs)
Try
' Test whether the value entered into the text box is even.
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num mod 2) = 0)
Catch ex As Exception
args.IsValid = false
End Try
End Sub
</script>
</head>
<body>
<form id="form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Names="Verdana"
Font-Size="10pt"
runat="server"
AssociatedControlID="Text1" />
<br />
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Names="verdana"
Font-Size="10pt"
OnServerValidate="ServerValidation"
runat="server"/>
<br />
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</form>
</body>
</html>
下列程式代碼範例示範如何建立用戶端 CustomValidator 控制件。
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
<script runat="server">
void ValidateBtn_OnClick(object sender, EventArgs e)
{
// Display whether the page passed validation.
if (Page.IsValid)
{
Message.Text = "Page is valid.";
}
else
{
Message.Text = "Page is not valid!";
}
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
// Test whether the value entered into the text box is even.
int i = int.Parse(args.Value);
args.IsValid = ((i%2) == 0);
}
catch(Exception ex)
{
args.IsValid = false;
}
}
</script>
</head>
<body>
<form id="Form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Name="Verdana"
Font-Size="10pt"
runat="server"/>
<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="VB" AutoEventWireup="True" %>
<html>
<head>
<script runat="server">
Sub ValidateBtn_OnClick(sender As Object, e As EventArgs)
' Display whether the page passed validation.
If Page.IsValid Then
Message.Text = "Page is valid."
Else
Message.Text = "Page is not valid!"
End If
End Sub
Sub ServerValidation(source As Object, args As ServerValidateEventArgs)
Try
' Test whether the value entered into the text box is even.
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num Mod 2) = 0)
Catch ex As Exception
args.IsValid = False
End Try
End Sub
</script>
</head>
<body>
<form id="Form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Name="Verdana"
Font-Size="10pt"
runat="server"/>
<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>
備註
CustomValidator使用控制項提供輸入控制件的使用者定義驗證函式。 控制項 CustomValidator 是與所驗證之輸入控制項不同的控制件,可讓您控制驗證訊息的顯示位置。
驗證控制件一律會在伺服器上執行驗證。 它們也有完整的客戶端實作,可讓啟用腳本的瀏覽器 (,例如 Microsoft Internet Explorer 4.0 和更新版本) 在用戶端上執行驗證。 客戶端驗證會先檢查使用者輸入再傳送至伺服器,藉此增強驗證程式。 這可讓在提交表單之前偵測到用戶端上的錯誤,以避免伺服器端驗證所需的資訊來回行程。
若要建立伺服器端驗證函式,請提供執行驗證之 ServerValidate 事件的處理程式。 使用傳遞至事件處理程式做為參數的物件ServerValidateEventArgs屬性,即可存取Value要驗證之輸入控件的字串。 然後驗證的結果會儲存在 IsValid 對象的屬性中 ServerValidateEventArgs 。
若要建立客戶端驗證函式,請先新增稍早所述的伺服器端驗證函式。 接下來,將客戶端驗證文本函式新增至 [ASP.NET (.aspx) ] 頁面。
如果您使用 Visual Basic Scripting Edition (VBScript) ,函式的格式必須是:
Sub ValidationFunctionName(source, arguments)
如果您使用 JScript,此函式的格式必須是:
function ValidationFunctionName(source, arguments)
參數source
是針對控件轉譯之 span> 元素的CustomValidator參考<。 這可讓您以程序設計方式控制 <範圍> 標籤,例如修改 InnerHtml 屬性。 參數 arguments
是具有兩個屬性的物件:Value 和IsValid。 此參數可讓您取得控制項的值,以根據自訂驗證例程來指出值是否有效。
ClientValidationFunction使用屬性來指定與 CustomValidator 控件相關聯的客戶端驗證文本函式名稱。 因為腳本函式是在用戶端上執行,所以函式必須是目標瀏覽器支援的語言,例如 VBScript 或 JScript。
注意
當您在 CustomValidator 控件內 UpdatePanel 使用 控件時,請確定驗證程式控制件和它相關聯的控件位於相同的面板中。 如需使用 UpdatePanel 控件進行部分頁面更新的詳細資訊,請參閱 部分頁面轉譯概觀。
就像伺服器端驗證一樣,輸入控件要驗證的字串是使用 Value 參數的 arguments
屬性來存取。 藉由設定 IsValid 參數的 arguments
屬性,傳回驗證的結果。
警告
使用驗證程式控制項時,您應該一律先檢查伺服器端驗證的結果,再執行任何處理。 在回傳之後,但在呼叫事件方法之前,頁面會呼叫驗證程式控件,並將其結果匯總至 Page.IsValid 屬性。 (您也可以使用 Validate
method.) 在自己的程式代碼中,明確呼叫驗證程式控制件,您應該先檢查屬性是否 Page.IsValid 傳 true
回,再處理輸入。 即使已啟用文本的瀏覽器可能會在驗證檢查失敗時防止客戶端發生回傳,您也應該一律先簽 Page.IsValid 入伺服器程式代碼,再處理已驗證的數據。
多個驗證控制項可以搭配個別輸入控件使用,以驗證不同的準則。 例如,您可以在控件上 TextBox 套用多個驗證控件,讓使用者輸入要新增至購物車的項目數量。 您可以使用 CustomValidator 控制項來確保指定的值小於清查的數量,以及 RequiredFieldValidator 控制項,以確保使用者將值 TextBox 輸入控制件。
注意
如果輸入控制項是空的,則不會呼叫任何驗證函式,而且驗證成功。 RequiredFieldValidator使用控制項要求使用者在輸入控制件中輸入數據。
CustomValidator您可以使用 控制項而不設定 ControlToValidate 屬性。 當您驗證多個輸入控件或驗證無法與驗證控制項搭配使用的輸入控件時,例如控制項, CheckBox 通常會這麼做。 在此情況下,Value傳遞至事件事件處理程式ServerValidate之 參數的 arguments
屬性和客戶端驗證函式一律包含空字串 (“”) 。 不過,在適當的情況下,仍會呼叫這些驗證函式,以判斷伺服器和用戶端的有效性。 若要存取要驗證的值,您必須以程式設計方式參考您想要驗證的輸入控件,然後從適當的屬性擷取值。 例如,若要驗證 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);
}
如需驗證控制件的詳細資訊,請參閱 BaseValidator。
Accessibility
如需如何設定此控件以產生符合輔助功能標準的標記的相關信息,請參閱 Visual Studio 中的輔助功能,以及 ASP.NET 和 ASP.NET 控件和輔助功能。
建構函式
CustomValidator() |
初始化 CustomValidator 類別的新執行個體。 |
屬性
AccessKey |
取得或設定便捷鍵 (Access Key),可讓您快速巡覽至 Web 伺服器控制項。 (繼承來源 WebControl) |
Adapter |
針對控制項取得瀏覽器的特定配置器。 (繼承來源 Control) |
AppRelativeTemplateSourceDirectory |
取得或設定包含了此控制項之 Page 或 UserControl 物件的相對應用程式虛擬目錄。 (繼承來源 Control) |
AssociatedControlID |
不支援這個屬性。 (繼承來源 BaseValidator) |
Attributes |
取得任意屬性 (Attribute) 的集合 (只供呈現),不與控制項上的屬性 (Property) 對應。 (繼承來源 WebControl) |
BackColor |
取得或設定 Web 伺服器控制項的背景色彩。 (繼承來源 WebControl) |
BindingContainer |
取得包含了此控制項之資料繫結的控制項。 (繼承來源 Control) |
BorderColor |
取得或設定 Web 控制項的框線色彩。 (繼承來源 WebControl) |
BorderStyle |
取得或設定 Web 伺服器控制項的框線樣式。 (繼承來源 WebControl) |
BorderWidth |
取得或設定 Web 伺服器控制項的框線寬度。 (繼承來源 WebControl) |
ChildControlsCreated |
取得值,指出是否已經建立伺服器控制項的子控制項。 (繼承來源 Control) |
ClientID |
取得 ASP.NET 所產生之 HTML 標記的控制項識別碼。 (繼承來源 Control) |
ClientIDMode |
取得或設定用來產生 ClientID 屬性值的演算法。 (繼承來源 Control) |
ClientIDSeparator |
取得字元值,表示在 ClientID 屬性中所使用的分隔字元。 (繼承來源 Control) |
ClientValidationFunction |
取得或設定驗證使用的自訂用戶端指令碼函式名稱。 |
Context |
取得與目前 Web 要求的伺服器控制項關聯的 HttpContext 物件。 (繼承來源 Control) |
Controls |
取得 ControlCollection 物件,表示 UI 階層架構中指定之伺服器控制項的子控制項。 (繼承來源 Control) |
ControlStyle |
取得 Web 伺服器控制項的樣式。 這個屬性主要由控制項開發人員使用。 (繼承來源 WebControl) |
ControlStyleCreated |
取得值,指出 Style 物件是否已經為 ControlStyle 屬性建立。 這個屬性主要由控制項開發人員使用。 (繼承來源 WebControl) |
ControlToValidate |
取得或設定要驗證的輸入控制項。 (繼承來源 BaseValidator) |
CssClass |
取得或設定用戶端上 Web 伺服器控制項所呈現的階層式樣式表 (CSS)。 (繼承來源 WebControl) |
DataItemContainer |
如果命名容器實作 IDataItemContainer,則取得命名容器的參考。 (繼承來源 Control) |
DataKeysContainer |
如果命名容器實作 IDataKeysControl,則取得命名容器的參考。 (繼承來源 Control) |
DesignMode |
取得值,指出控制項是否正用於設計介面上。 (繼承來源 Control) |
Display |
取得或設定驗證控制項中錯誤訊息的顯示行為。 (繼承來源 BaseValidator) |
EnableClientScript |
取得或設定值,指出是否啟用用戶端驗證。 (繼承來源 BaseValidator) |
Enabled |
取得或設定值,指出是否啟用驗證控制項。 (繼承來源 BaseValidator) |
EnableTheming |
取得或設定值,指出佈景主題是否套用至此控制項。 (繼承來源 WebControl) |
EnableViewState |
取得或設定值,該值表示伺服器控制項是否對要求的用戶端而言保持其檢視狀態,以及它包含的任何子控制項狀態。 (繼承來源 Control) |
ErrorMessage |
取得或設定在驗證失敗時,ValidationSummary 控制項中顯示之錯誤訊息的文字。 (繼承來源 BaseValidator) |
Events |
取得控制項事件處理常式委派 (Delegate) 的清單。 這個屬性是唯讀的。 (繼承來源 Control) |
Font |
取得與 Web 伺服器控制項關聯的字型屬性。 (繼承來源 WebControl) |
ForeColor |
取得或設定在驗證失敗時,訊息顯示的色彩。 (繼承來源 BaseValidator) |
HasAttributes |
取得值,指出控制項是否已經設定屬性。 (繼承來源 WebControl) |
HasChildViewState |
取得值,指出目前伺服器控制項的子控制項是否有任何已儲存的檢視狀態設定。 (繼承來源 Control) |
Height |
取得或設定 Web 伺服器控制項的高度。 (繼承來源 WebControl) |
ID |
取得或設定指派給伺服器控制項的程式設計識別項。 (繼承來源 Control) |
IdSeparator |
取得用來分隔控制項識別項的字元。 (繼承來源 Control) |
IsChildControlStateCleared |
取得值,指出這個控制項中所包含的控制項是否有控制項狀態。 (繼承來源 Control) |
IsEnabled |
取得值,指出是否啟用控制項。 (繼承來源 WebControl) |
IsTrackingViewState |
取得值,指出伺服器控制項是否正在儲存檢視狀態的變更。 (繼承來源 Control) |
IsUnobtrusive |
取得值,指出控制項是否產生低調 JavaScript。 (繼承來源 BaseValidator) |
IsValid |
取得或設定值,指出相關輸入控制項是否通過驗證。 (繼承來源 BaseValidator) |
IsViewStateEnabled |
取得值,指出這個控制項是否已啟用檢視狀態。 (繼承來源 Control) |
LoadViewStateByID |
取得值,指出控制項是否依 ID (而不是索引) 參與載入其檢視狀態。 (繼承來源 Control) |
NamingContainer |
取得伺服器控制項命名容器的參考,其建立唯一命名空間,在具有相同 ID 屬性值的伺服器控制項之間作區別。 (繼承來源 Control) |
Page |
取得含有伺服器控制項的 Page 執行個體的參考。 (繼承來源 Control) |
Parent |
在網頁控制階層架構中取得伺服器控制項之父控制項的參考。 (繼承來源 Control) |
PropertiesValid |
取得值,指出 ControlToValidate 屬性指定的控制項是否為有效的控制項。 (繼承來源 BaseValidator) |
RenderingCompatibility |
取得值,這個值會指定將與呈現 HTML 相容的 ASP.NET 版本。 (繼承來源 Control) |
RenderUplevel |
取得值,指出用戶端的瀏覽器是否支援「上層」呈現。 (繼承來源 BaseValidator) |
SetFocusOnError |
取得或設定值,指出驗證失敗時,焦點是否設定為 ControlToValidate 屬性指定的控制項。 (繼承來源 BaseValidator) |
Site |
當呈現在設計介面上時,取得裝載目前控制項之容器的資訊。 (繼承來源 Control) |
SkinID |
取得或設定要套用至控制項的面板。 (繼承來源 WebControl) |
Style |
取得文字屬性的集合,將呈現為 Web 伺服器控制項的外部標記上的樣式屬性。 (繼承來源 WebControl) |
SupportsDisabledAttribute |
取得值,這個值表示當控制項的 |
TabIndex |
取得或設定 Web 伺服器控制項的定位索引。 (繼承來源 WebControl) |
TagKey |
取得用於呈現 Label 控制項的 HTML 標記。 (繼承來源 Label) |
TagName |
取得控制項標記的名稱。 這個屬性主要由控制項開發人員使用。 (繼承來源 WebControl) |
TemplateControl |
取得或設定包含了此控制項之樣板的參考。 (繼承來源 Control) |
TemplateSourceDirectory |
取得包含目前伺服器控制項的 Page 或 UserControl 的虛擬目錄。 (繼承來源 Control) |
Text |
取得或設定驗證失敗時顯示於驗證控制項中的文字。 (繼承來源 BaseValidator) |
ToolTip |
取得或設定當滑鼠指標停留在 Web 伺服器控制項時顯示的文字。 (繼承來源 WebControl) |
UniqueID |
取得伺服器控制項唯一的、符合階層架構的識別項。 (繼承來源 Control) |
ValidateEmptyText |
取得或設定布林值 (Boolean),表示是否應該驗證空白文字。 |
ValidateRequestMode |
取得或設定值,指出控制項是否對來自瀏覽器的用戶端輸入檢查潛在的危險值。 (繼承來源 Control) |
ValidationGroup |
取得或設定這個驗證控制項所屬之驗證群組的名稱。 (繼承來源 BaseValidator) |
ViewState |
取得狀態資訊的字典,允許您在相同網頁的多個要求之間,儲存和還原伺服器控制項的檢視狀態。 (繼承來源 Control) |
ViewStateIgnoresCase |
取得值,指出 StateBag 物件是否不區分大小寫。 (繼承來源 Control) |
ViewStateMode |
取得或設定這個控制項的檢視狀態模式。 (繼承來源 Control) |
Visible |
取得或設定值,指出伺服器控制項是否會轉譯為頁面上的 UI。 (繼承來源 Control) |
Width |
取得或設定 Web 伺服器控制項的寬度。 (繼承來源 WebControl) |
方法
事件
DataBinding |
發生於伺服器控制項繫結至資料來源時。 (繼承來源 Control) |
Disposed |
發生於伺服器控制項從記憶體釋放時,這是在要求 ASP.NET 網頁時,伺服器控制項生命週期的最後階段。 (繼承來源 Control) |
Init |
發生於初始化伺服器控制項時,是其生命週期中的第一個步驟。 (繼承來源 Control) |
Load |
發生於載入伺服器控制項至 Page 物件時。 (繼承來源 Control) |
PreRender |
在 Control 物件載入之後但在呈現之前發生。 (繼承來源 Control) |
ServerValidate |
在伺服器上執行驗證時發生。 |
Unload |
發生於伺服器控制項從記憶體卸載時。 (繼承來源 Control) |
明確介面實作
擴充方法
FindDataSourceControl(Control) |
傳回與指定之控制項的資料控制項相關聯的資料來源。 |
FindFieldTemplate(Control, String) |
傳回在指定之控制項的命名容器中所指定資料行的欄位樣板。 |
FindMetaTable(Control) |
傳回包含資料控制項的中繼資料表物件。 |