Share via


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 事件提供處理常式。 可以使用以參數形態傳遞至事件處理常式中之 ServerValidateEventArgsValue 屬性,存取輸入控制項中要驗證的字串。 驗證的結果會儲存在 ServerValidateEventArgsIsValid 屬性中。

若要建立用戶端驗證函式,請先加入前述的伺服器端驗證函式。 然後,將用戶端驗證指令碼加入 .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 Web 網頁預設會驗證使用者輸入,但不包含當中的指令碼或 HTML 項目。如需詳細資訊,請參閱Script Exploits Overview

<%@ 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" />
      &nbsp;&nbsp;
      <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" />
      &nbsp;&nbsp;
      <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" />
      &nbsp;&nbsp;
      <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" />
      &nbsp;&nbsp;
      <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

其他資源

驗證伺服器控制項語法