HOW TO:使用 ASP.NET 伺服器控制項的自訂函式驗證

更新:2007 年 11 月

如果現有的 ASP.NET 驗證控制項無法滿足您的需求,則可定義自訂伺服器端驗證函式,並使用 CustomValidator 控制項呼叫此函式。藉由使用 ECMAScript (JavaScript) 撰寫能夠複製伺服器端方法邏輯的函式,您也可以加入用戶端驗證,在網頁送出前檢查使用者輸入。

即使您使用的是用戶端檢查,還是應該要執行伺服器端驗證。用戶端驗證可經由停用或變更用戶端指令碼來防止使用者略過驗證。

安全性注意事項:

根據預設,ASP.NET Web 網頁會自動進行驗證,檢查惡意的使用者是否正試圖將指令碼或 HTML 項目傳送到您的應用程式。如需詳細資訊,請參閱指令碼攻擊概觀

若要使用自訂函式在伺服器上驗證

  1. CustomValidator 控制項加入至網頁,並設定下列屬性:

    屬性

    描述

    ControlToValidate

    您要驗證之控制項的 ID。

    ErrorMessage, Text, Display

    驗證失敗時,指定一個或多個錯誤顯示之文字和位置的屬性 (Property)。如需詳細資訊,請參閱 HOW TO:控制 ASP.NET 伺服器控制項的驗證錯誤訊息顯示

  2. 為控制項的 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);
    }
    
  3. 使用下列程式碼,繫結事件處理常式與方法:

    <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>
    
  4. 在 ASP.NET Web 網頁程式碼中加入一個檢查有效性的測試。如需詳細資訊,請參閱 HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性

若要在用戶端上建立自訂的驗證邏輯

  1. 以 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>
    
  2. 在 ASP.NET Web 網頁程式碼中加入一個檢查有效性的測試。如需詳細資訊,請參閱 HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性

請參閱

概念

ASP.NET 伺服器控制項的驗證類型

其他資源

驗證 ASP.NET 控制項