HOW TO:使用 ASP.NET 伺服器控制項的自訂函式驗證
更新:2007 年 11 月
如果現有的 ASP.NET 驗證控制項無法滿足您的需求,則可定義自訂伺服器端驗證函式,並使用 CustomValidator 控制項呼叫此函式。藉由使用 ECMAScript (JavaScript) 撰寫能夠複製伺服器端方法邏輯的函式,您也可以加入用戶端驗證,在網頁送出前檢查使用者輸入。
即使您使用的是用戶端檢查,還是應該要執行伺服器端驗證。用戶端驗證可經由停用或變更用戶端指令碼來防止使用者略過驗證。
安全性注意事項: |
---|
根據預設,ASP.NET Web 網頁會自動進行驗證,檢查惡意的使用者是否正試圖將指令碼或 HTML 項目傳送到您的應用程式。如需詳細資訊,請參閱指令碼攻擊概觀。 |
若要使用自訂函式在伺服器上驗證
將 CustomValidator 控制項加入至網頁,並設定下列屬性:
屬性
描述
您要驗證之控制項的 ID。
驗證失敗時,指定一個或多個錯誤顯示之文字和位置的屬性 (Property)。如需詳細資訊,請參閱 HOW TO:控制 ASP.NET 伺服器控制項的驗證錯誤訊息顯示。
為控制項的 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" ></asp:textbox> <asp:CustomValidator id="CustomValidator1" OnServerValidate="TextValidate" ControlToValidate="TextBox1" ErrorMessage="Text must be 8 or more characters."> </asp:CustomValidator>
<asp:textbox id="TextBox1" ></asp:textbox> <asp:CustomValidator id="CustomValidator1" 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" text=""></asp:Textbox> <asp:CustomValidator id="CustomValidator2" ControlToValidate = "text1" ErrorMessage = "You must enter at least 8 characters!" ClientValidationFunction="validateLength" > </asp:CustomValidator>
<asp:Textbox id="text1" text=""></asp:Textbox> <asp:CustomValidator id="CustomValidator2" ControlToValidate = "text1" ErrorMessage = "You must enter at least 8 characters!" ClientValidationFunction="validateLength" > </asp:CustomValidator>
在 ASP.NET Web 網頁程式碼中加入一個檢查有效性的測試。如需詳細資訊,請參閱 HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性。