按一下以給予評分及指教
全部折疊/全部展開 全部折疊
本頁僅適用於
Microsoft Visual Studio 2008/.NET Framework 3.5

其他版本也適用於下列軟體:
.NET Framework 類別庫
CustomValidator 類別

更新:2007 年 11 月

在輸入控制項上執行使用者定義的驗證。

命名空間:  System.Web.UI.WebControls
組件:  System.Web (在 System.Web.dll 中)

Visual Basic (宣告)
<AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
Public Class CustomValidator _
    Inherits BaseValidator
Visual Basic (使用方式)
Dim instance As CustomValidator
C#
[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class CustomValidator : BaseValidator
Visual C++
[AspNetHostingPermissionAttribute(SecurityAction::LinkDemand, Level = AspNetHostingPermissionLevel::Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction::InheritanceDemand, Level = AspNetHostingPermissionLevel::Minimal)]
public ref class CustomValidator : public BaseValidator
J#
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public class CustomValidator extends BaseValidator
JScript
public class CustomValidator extends BaseValidator
ASP.NET
<asp:CustomValidator />

使用 CustomValidator 控制項,為輸入控制項提供使用者定義驗證函式。CustomValidator 控制項不同於它所驗證的輸入控制項,可以讓您控制顯示驗證訊息的位置。

驗證控制項總是在伺服器上執行驗證。它們也具有完整的用戶端實作,允許啟用指令碼的瀏覽器 (例如 Microsoft Internet Explorer 4.0 (含) 以後版本) 在用戶端執行驗證。用戶端驗證會在使用者輸入傳送至伺服器之前進行檢查,以加強驗證程序。這讓錯誤得以在表單送出前,在用戶端被偵測到,以避免伺服器端驗證所需資訊的來回往返。

若要建立伺服器端驗證函式,請為執行驗證的 ServerValidate 事件提供處理常式。可以使用以參數形態傳遞至事件處理常式中之 ServerValidateEventArgsValue 屬性,存取輸入控制項中要驗證的字串。驗證的結果會儲存在 ServerValidateEventArgsIsValid 屬性中。

若要建立用戶端驗證函式,請先加入前述的伺服器端驗證函式。接著,將用戶端驗證指令碼函式加入 ASP.NET (.aspx) 網頁。

如果您是使用 Visual Basic Scripting Edition (VBScript),則函式必須採用以下格式:

 Sub ValidationFunctionName(source, arguments)

如果您是使用 JScript,則函式必須採用以下格式:

 function ValidationFunctionName(source, arguments)

source 參數是為 CustomValidator 控制項呈現之 <span> 項目的參考。這個參數可讓您以程式設計的方式控制 <span> 標記,例如修改 InnerHtml 屬性。arguments 參數是擁有兩個屬性的物件:Value 和 IsValid。這個參數可讓您取得控制項的值,以便根據自訂的驗證常式驗證及指示值是否有效。

ClientValidationFunction 屬性可以用來指定與 CustomValidator 控制項關聯的用戶端驗證指令碼函式名稱。由於指令碼函式是在用戶端上執行,因此函式必須使用目標瀏覽器支援的語言,例如 VBScript 或 JScript。

注意事項:

當您在 UpdatePanel 控制項內使用 CustomValidator 控制項時,請確定驗證器控制項與相關聯的控制項位於相同的面板中。如需使用部分網頁更新之 UpdatePanel 控制項的詳細資訊,請參閱 網頁局部呈現概觀

要驗證之輸入控制項中的字串也和伺服器端驗證一樣,是使用 arguments 參數的 Value 屬性存取。設定 arguments 參數的 IsValid 屬性,以傳回驗證的結果。

警告:

使用驗證程式控制項時,請務必在執行任何處理前檢查伺服器端驗證的結果。在回傳之後,但在呼叫事件方法之前,頁面會呼叫驗證程式控制項並將其結果彙總 (Aggregate) 至 Page..::.IsValid 屬性 (您也可以使用 Validate 方法,明確呼叫驗證程式控制項)。在您自己的程式碼中,您應該在處理輸入前檢查 Page..::.IsValid 屬性是否傳回 true。雖然啟用指令碼的瀏覽器可能會在驗證檢查失敗時防止用戶端回傳,但是您應該永遠在處理已驗證資料之前檢查伺服端程式碼中的 Page..::.IsValid

多個驗證控制項可與個別輸入控制項一起使用,以驗證不同準則。例如,您可以在 TextBox 控制項上套用多個驗證控制項,以允許使用者輸入要加入購物車的項目數量。您可以使用 CustomValidator 控制項以確保指定數值小於庫存量,和使用 RequiredFieldValidator 控制項以確保使用者會輸入值至 TextBox 控制項中。

注意事項:

如果輸入控制項為空白,則沒有驗證函式會被呼叫,並且驗證成功。使用 RequiredFieldValidator 控制項,要求使用者輸入資料到輸入控制項。

您可以使用 CustomValidator 控制項,而不需要設定 ControlToValidate 屬性。通常在驗證多個輸入控制項,或驗證無法與驗證控制項 (例如 CheckBox 控制項) 一起使用的輸入控制項的時候,可以執行這個動作。在這種情況下,傳遞到 ServerValidate 事件之事件處理常式和傳遞到用戶端驗證函式中的 arguments 參數的 Value 屬性永遠會包含空字串 ("")。不過,這些驗證函式仍會在適當的位置被呼叫,以判斷伺服器和用戶端的有效性。若要存取要驗證的值,您必須以程式設計方式參考要驗證的輸入控制項,然後從適當屬性中擷取值。例如,若要在伺服器上驗證 CheckBox 控制項,請不要設定驗證控制項的 ControlToValidate 屬性,並請為 ServerValidate 事件的處理常式使用下列程式碼:

Visual Basic
Sub ServerValidation (source As object, args As ServerValidateEventArgs)
    args.IsValid = (CheckBox1.Checked = True)
 End Sub
C#
void ServerValidation (object source, ServerValidateEventArgs args)
 {
    args.IsValid = (CheckBox1.Checked == true);
 }

如需驗證控制項的詳細資訊,請參閱 BaseValidator

可及性

根據預設為這個控制項呈現的標記,可能與可及性標準 (例如 Web 內容可及性方針 1.0 (WCAG) 優先權 1 方針) 不一致。如需這個控制項之可及性支援的詳細資料,請參閱 ASP.NET 控制項和網頁可及性

TopicLocation
HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性建置 ASP .NET Web 應用程式
HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:以程式的方式驗證 ASP.NET 伺服器控制項建置 ASP .NET Web 應用程式
HOW TO:以程式的方式驗證 ASP.NET 伺服器控制項在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:使用 ASP.NET 伺服器控制項的自訂函式驗證建置 ASP .NET Web 應用程式
HOW TO:使用 ASP.NET 伺服器控制項的自訂函式驗證在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:停用 ASP.NET 伺服器控制項的驗證建置 ASP .NET Web 應用程式
HOW TO:停用 ASP.NET 伺服器控制項的驗證在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:在 ASP.NET 伺服器控制項中,指定就地訊息的配置建置 ASP .NET Web 應用程式
HOW TO:在 ASP.NET 伺服器控制項中,指定就地訊息的配置在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:格式化 ASP.NET 伺服器控制項的驗證錯誤訊息建置 ASP .NET Web 應用程式
HOW TO:格式化 ASP.NET 伺服器控制項的驗證錯誤訊息在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:比對模式驗證 ASP.NET 伺服器控制項建置 ASP .NET Web 應用程式
HOW TO:比對模式驗證 ASP.NET 伺服器控制項在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:比對特定值驗證 ASP.NET 伺服器控制項建置 ASP .NET Web 應用程式
HOW TO:比對特定值驗證 ASP.NET 伺服器控制項在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:比對範圍值驗證 ASP.NET 伺服器控制項建置 ASP .NET Web 應用程式
HOW TO:比對範圍值驗證 ASP.NET 伺服器控制項在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:比對資料型別驗證 ASP.NET 伺服器控制項建置 ASP .NET Web 應用程式
HOW TO:比對資料型別驗證 ASP.NET 伺服器控制項在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:比對資料庫值驗證 ASP.NET 伺服器控制項建置 ASP .NET Web 應用程式
HOW TO:比對資料庫值驗證 ASP.NET 伺服器控制項在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:顯示 ASP.NET 伺服器控制項的伺服器端自訂驗證訊息建置 ASP .NET Web 應用程式
HOW TO:顯示 ASP.NET 伺服器控制項的伺服器端自訂驗證訊息在 Visual Studio 中建立 ASP .NET Web 應用程式
HOW TO:驗證 ASP.NET 伺服器控制項的必要項目建置 ASP .NET Web 應用程式
HOW TO:驗證 ASP.NET 伺服器控制項的必要項目在 Visual Studio 中建立 ASP .NET Web 應用程式
逐步解說:驗證 Web Form 網頁中的使用者輸入在 Visual Studio 中建置 ASP .NET Web 應用程式
逐步解說:驗證 Web Form 網頁中的使用者輸入使用 Visual Web Developer 建置應用程式

下列程式碼範例示範如何建立伺服器端 CustomValidator 控制項。

安全性注意事項:

這個範例有一個可接受使用者輸入的文字方塊,這可能會造成安全性威脅。根據預設,ASP.NET Web 網頁會驗證使用者輸入未包含指令碼或 HTML 項目。如需詳細資訊,請參閱 指令碼攻擊概觀

Visual Basic
<%@ Page Language="VB" AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >
<head>
    <title>CustomValidator ServerValidate Example</title>
<script runat="server">

      Sub ValidateBtn_OnClick(sender As Object, e As EventArgs) 

         ' Display whether the page passed validation.
         If Page.IsValid Then 

            Message.Text = "Page is valid."

         Else 

            Message.Text = "Page is not valid!"

         End If

      End Sub

      Sub ServerValidation(source As Object, args As ServerValidateEventArgs)

         Try 

            ' Test whether the value entered into the text box is even.
            Dim num As Integer = Integer.Parse(args.Value)
            args.IsValid = ((num mod 2) = 0)

         Catch ex As Exception

            args.IsValid = false

         End Try

      End Sub

   </script>    

</head>
<body>

   <form id="form1" runat="server">

      <h3>CustomValidator ServerValidate Example</h3>

      <asp:Label id="Message"
           Text="Enter an even number:" 
           Font-Names="Verdana" 
           Font-Size="10pt" 
           runat="server"
           AssociatedControlID="Text1" />

      <br />

      <asp:TextBox id="Text1" 
           runat="server" />

      &nbsp;&nbsp;

      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Names="verdana" 
           Font-Size="10pt"
           OnServerValidate="ServerValidation"
           runat="server"/>

      <br />

      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>

   </form>

</body>
</html>

C#
<%@ Page Language="C#" AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html  >
<head>
    <title>CustomValidator ServerValidate Example</title>
<script runat="server">

      void ValidateBtn_OnClick(object sender, EventArgs e) 
      { 

         // Display whether the page passed validation.
         if (Page.IsValid) 
         {

            Message.Text = "Page is valid.";

         }

         else 
         {

            Message.Text = "Page is not valid!";

         }

      }

      void ServerValidation(object source, ServerValidateEventArgs args)
      {

         try 
         {

            // Test whether the value entered into the text box is even.
            int i = int.Parse(args.Value);
            args.IsValid = ((i%2) == 0);

         }

         catch(Exception ex)
         {

            args.IsValid = false;

         }

      }

   </script>    

</head>
<body>

   <form id="form1" runat="server">

      <h3>CustomValidator ServerValidate Example</h3>

      <asp:Label id="Message"  
           Text="Enter an even number:" 
           Font-Names="Verdana" 
           Font-Size="10pt" 
           runat="server"
           AssociatedControlID="Text1"/>

      <br />

      <asp:TextBox id="Text1" 
           runat="server" />

      &nbsp;&nbsp;

      <asp:CustomValidator id="CustomValidator1"
           ControlToValidate="Text1"
           Display="Static"
           ErrorMessage="Not an even number!"
           ForeColor="green"
           Font-Names="verdana" 
           Font-Size="10pt"
           OnServerValidate="ServerValidation"
           runat="server"/>

      <br />

      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>

   </form>

</body>
</html>

下列程式碼範例示範如何建立用戶端 CustomValidator 控制項。

Visual Basic
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    Sub ValidateBtn_OnClick(ByVal sender As Object, ByVal e As EventArgs)

        ' Display whether the page passed validation.
        If Page.IsValid Then
            Message.Text = "Page is valid."
        Else
            Message.Text = "Page is not valid!"
        End If

    End Sub

    Sub ServerValidation(ByVal source As Object, ByVal args As ServerValidateEventArgs)

        Try
            ' Test whether the value entered into the text box is even.
            Dim num As Integer = Integer.Parse(args.Value)
            args.IsValid = ((num Mod 2) = 0)

        Catch ex As Exception
            args.IsValid = False
        End Try

    End Sub
</script>

<html  >
<head runat="server">
    <title>CustomValidator Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:Label id="Message"  
           Text="Enter an even number:" 
           Font-Size="10pt" 
           runat="server"
           AssociatedControlID="Text1"/>
      <br />
      <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-Size="10pt"
           runat="server"/>
      <br /> 
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>    
    </div>
    </form>
</body>
</html>
<script type="text/javascript">
   function ClientValidate(source, clientside_arguments)
   {         
      if (clientside_arguments.Value % 2 == 0 )
      {
         clientside_arguments.IsValid=true;
      }
      else {clientside_arguments.IsValid=false};
   }
</script>
C#
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    void ValidateBtn_OnClick(object sender, EventArgs e)
    {

        // Display whether the page passed validation.
        if (Page.IsValid)
        {
            Message.Text = "Page is valid.";
        }

        else
        {
            Message.Text = "Page is not valid!";
        }

    }

    void ServerValidation(object source, ServerValidateEventArgs args)
    {

        try
        {
            // Test whether the value entered into the text box is even.
            int i = int.Parse(args.Value);
            args.IsValid = ((i % 2) == 0);
        }

        catch (Exception ex)
        {
            args.IsValid = false;
        }

    }
</script>

<html  >
<head runat="server">
    <title>CustomValidator Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:Label id="Message"  
           Text="Enter an even number:" 
           Font-Size="10pt" 
           runat="server"
           AssociatedControlID="Text1"/>
      <br />
      <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-Size="10pt"
           runat="server"/>
      <br /> 
      <asp:Button id="Button1"
           Text="Validate" 
           OnClick="ValidateBtn_OnClick" 
           runat="server"/>    
    </div>
    </form>
</body>
</html>
<script type="text/javascript">
   function ClientValidate(source, clientside_arguments)
   {         
      if (clientside_arguments.Value % 2 == 0 )
      {
         clientside_arguments.IsValid=true;
      }
      else {clientside_arguments.IsValid=false};
   }
</script>
System..::.Object
  System.Web.UI..::.Control
    System.Web.UI.WebControls..::.WebControl
      System.Web.UI.WebControls..::.Label
        System.Web.UI.WebControls..::.BaseValidator
          System.Web.UI.WebControls..::.CustomValidator
這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求

.NET Framework

支援版本:3.5、3.0、2.0、1.1、1.0
社群內容   什麼是社群內容?
新增內容 RSS  註解
Processing
© 2009 Microsoft Corporation. 著作權所有,並保留一切權利。 使用規定 | 商標 | 隱私權聲明
Page view tracker