更新:2007 年 11 月
如果現有的 ASP.NET 驗證控制項無法滿足您的需求,則可定義自訂伺服器端驗證函式,並使用 CustomValidator 控制項呼叫此函式。藉由使用 ECMAScript (JavaScript) 撰寫能夠複製伺服器端方法邏輯的函式,您也可以加入用戶端驗證,在網頁送出前檢查使用者輸入。
即使您使用的是用戶端檢查,還是應該要執行伺服器端驗證。用戶端驗證可經由停用或變更用戶端指令碼來防止使用者略過驗證。
安全性注意事項: |
|---|
根據預設,ASP.NET Web 網頁會自動進行驗證,檢查惡意的使用者是否正試圖將指令碼或 HTML 項目傳送到您的應用程式。如需詳細資訊,請參閱指令碼攻擊概觀。 |
若要使用自訂函式在伺服器上驗證
將 CustomValidator 控制項加入至網頁,並設定下列屬性:
為控制項的 ServerValidate 事件建立伺服器端事件處理常式。這個事件將被呼叫來執行驗證。這個方式法含有簽章如下:
Protected Sub CustomValidator1_ServerValidate(ByVal _
source As System.Object, ByVal args As _
System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles CustomValidator1.ServerValidate
End Sub
protected void ValidationFunctionName(object source, ServerValidateEventArgs args)
{
}
source 參數是引發此事件之自訂驗證控制項的參考。屬性 args.Value 會包含要驗證的使用者輸入。如果為有效值,請將 args.IsValid 設為 true,否則為 false。
下列程式碼範例會顯示如何建立自訂驗證。事件處理常式會判斷使用者輸入的長度是等於或大於八個字元。
Protected Sub TextValidate(ByVal source As System.Object, _
ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles CustomValidator1.ServerValidate
args.IsValid = (args.Value.Length >= 8)
End Sub
protected void TextValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = (args.Value.Length >= 8);
}
使用下列程式碼,繫結事件處理常式與方法:
<asp:textbox id="TextBox1" runat="server"></asp:textbox>
<asp:CustomValidator id="CustomValidator1" runat="server"
OnServerValidate="TextValidate"
ControlToValidate="TextBox1"
ErrorMessage="Text must be 8 or more characters.">
</asp:CustomValidator>
<asp:textbox id="TextBox1" runat="server"></asp:textbox>
<asp:CustomValidator id="CustomValidator1" runat="server"
OnServerValidate="TextValidate"
ControlToValidate="TextBox1"
ErrorMessage="Text must be 8 or more characters.">
</asp:CustomValidator>
在 ASP.NET Web 網頁程式碼中加入一個檢查有效性的測試。如需詳細資訊,請參閱 HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性。
若要在用戶端上建立自訂的驗證邏輯
以 ECMAScript (JavaScript、JScript) 建立驗證函式。
下列程式碼範例會說明自訂的用戶端驗證。網頁的摘錄中會顯示 CustomValidator 控制項所參考的 TextBox 控制項。驗證控制項會呼叫名為 validateLength 的用戶端指令碼函式,確保使用者至少會在 TextBox 控制項中輸入八個字元。
<script type="text/javascript">
function validateLength(oSrc, args){
args.IsValid = (args.Value.length >= 8);
}
</script>
<script type="text/javascript">
function validateLength(oSrc, args){
args.IsValid = (args.Value.length >= 8);
}
</script>
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox>
<asp:CustomValidator id="CustomValidator2" runat="server"
ControlToValidate = "text1"
ErrorMessage = "You must enter at least 8 characters!"
ClientValidationFunction="validateLength" >
</asp:CustomValidator>
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox>
<asp:CustomValidator id="CustomValidator2" runat="server"
ControlToValidate = "text1"
ErrorMessage = "You must enter at least 8 characters!"
ClientValidationFunction="validateLength" >
</asp:CustomValidator>
在 ASP.NET Web 網頁程式碼中加入一個檢查有效性的測試。如需詳細資訊,請參閱 HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性。
概念
其他資源