共用方式為


CustomValidator 控制項 (一般參考)

更新:2007 年 11 月

評估輸入控制項的值,以判斷它是否通過自訂的驗證邏輯。

<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 事件提供處理常式。使用傳遞到事件處理常式做為參數之 ServerValidateEventArgs 物件的 Value 屬性,即可存取要驗證之輸入控制項的字串。然後,驗證的結果就會儲存在 ServerValidateEventArgs 物件的 IsValid 屬性中。

若要建立用戶端驗證函式,請先加入前述的伺服器端驗證函式。然後,將用戶端驗證指令碼加入 .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 控制項) 一起使用的輸入控制項時,便會如此進行。在此情況下,arguments 參數的 Value 屬性便會傳遞至 ServerValidate 事件的事件處理常式,以及永遠包含空字串 ("") 的用戶端驗證函式。不過,這些驗證函式仍會在適當的位置呼叫,以判斷伺服器和用戶端的有效性。若要存取要驗證的值,您必須以程式設計方式參考要驗證的輸入控制項,然後從適當屬性中擷取值。例如,若要在伺服器上驗證 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 項目。如需詳細資訊,請參閱指令碼攻擊概觀

<%@ 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

其他資源

驗證伺服器控制項語法