HOW TO:以程式的方式測試 ASP.NET 伺服器控制項的有效性

更新:2007 年 11 月

驗證控制項會測試使用者的輸入、設定錯誤狀態並產生錯誤訊息。它們不會改變網頁處理的流程 — 例如,當它們偵測到使用者輸入錯誤時不會略過您的程式碼。而是您必須在執行應用程式專屬邏輯前,在程式碼中測試控制項的狀態。如果偵測到錯誤,則您必須防止程式碼執行;網頁會繼續處理並將錯誤訊息傳回給使用者。

安全性注意事項:

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

您可測試一般性的整個網頁狀態,也可測試個別控制項的狀態。通常您會在為網頁所建立的事件處理常式中執行這些工作。

若要測試一般性錯誤狀態

  • 在您的程式碼中,測試網頁的 IsValid 屬性 (Property)。此屬性包含網頁中所有驗證控制項的 IsValid 屬性值 (使用邏輯 AND),如果任一驗證控制項設為無效,網頁的屬性將傳回 false。

    注意事項:

    在網頁初始化或載入階段期間,無法使用驗證資訊。不過,您可以在 Page_Load 期間手動呼叫 Validate 方法,然後測試網頁的 IsValid 屬性。如需網頁狀態的詳細資訊,請參閱 ASP.NET 網頁存留週期概觀

    下列程式碼範例會顯示按鈕的事件處理常式。程式碼會測試網頁的 IsValid 屬性。請注意,在此並不需要 Else 子句,因為網頁將被自動傳回給瀏覽器,而驗證控制項將顯示自己的錯誤訊息。

    Public Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs) _
    Handles Button1.Click
    
        If Me.IsValid Then
            ' Perform database updates or other logic here
        End If
    End Sub
    
    void Button1_Click(object sender, System.EventArgs e)
    {
        if (IsValid)
        {
            // Perform database updates or other logic here.
        }
    }
    

若要測試個別控制項的錯誤狀態

  • 重複網頁的 Validators 集合,它包含所有驗證控制項的參考。接著您可以檢查每個驗證控制項的 IsValid 屬性。

    注意事項:

    如果要在 Page_Load 期間執行這項檢查,您必須先手動呼叫 Validate 方法。

    下列程式碼範例會顯示如何取得個別驗證控制項的狀態。

    If (Me.IsPostBack) Then
        Me.Validate()
        If (Not Me.IsValid) Then
            Dim msg As String
            ' Loop through all validation controls to see which 
            ' generated the error(s).
            Dim oValidator As IValidator
            For Each oValidator In Validators
                If oValidator.IsValid = False Then
                    msg = msg & "<br />" & oValidator.ErrorMessage
                End If
            Next
            Label1.Text = msg
        End If
    End If
    
    if (this.IsPostBack)
    {
        this.Validate();
        if (!this.IsValid)
        {
            string msg = "";
            // Loop through all validation controls to see which
            // generated the errors.
            foreach (IValidator aValidator in this.Validators)
            {
                if (!aValidator.IsValid)
                {
                    msg += "<br />" + aValidator.ErrorMessage;
                }
            }
            Label1.Text = msg;
        }
    }
    

請參閱

工作

HOW TO:控制 ASP.NET 伺服器控制項的驗證錯誤訊息顯示

HOW TO:以程式的方式驗證 ASP.NET 伺服器控制項

參考

驗證 ASP.NET Web 網頁中的使用者輸入