共用方式為


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

更新:2007 年 11 月

根據預設,當網頁回傳到伺服器時、在網頁初始化之後 (也就是在處理檢視狀態和回傳資料以後),以及在呼叫事件處理程式碼之前,ASP.NET 驗證控制項會自動執行驗證。如果瀏覽器支援用戶端指令碼,則控制項也會在瀏覽器中執行驗證。

但是,有時候您可能想要以程式設計方式自行執行驗證。您可能會在下列情況下以程式的方式進行驗證:

  • 如果驗證值在執行階段前都還沒有設定時。例如,如果您正在使用 RangeValidator 控制項,可能會根據使用者所輸入的值,在執行階段設定它的 MinimumValueMaximumValue 屬性 (Property)。在此情況下,因為當網頁呼叫驗證控制項執行驗證時,RangeValidator 控制項的資訊不足,所以預設的驗證不會執行。

  • 如果您想要判斷 Page_Load 事件處理常式中某個控制項 (或整個網頁) 的有效性時。在該網頁處理階段中,因為尚未叫用 (Invoke) 驗證控制項,所以網頁或個別控制項的 IsValid 屬性尚未設定 (如果您嘗試取得此屬性的值,則會擲回例外狀況)。但是,如果您想要判斷有效性,可以用程式設計的方式呼叫驗證。

  • 如果您在執行階段加入控制項 (輸入控制項或驗證控制項) 時。

更廣泛地說,在您要更精確控制執行驗證的時間時,隨時可以用程式的方式進行驗證。

安全性注意事項:

根據預設,ASP.NET Web 網頁會自動驗證惡意的使用者是否正試圖將指令碼或 HTML 項目傳送到您的應用程式。如果已停用這個功能,則您可以自行呼叫 ValidateInput 方法。如需詳細資訊,請參閱指令碼攻擊概觀

若要以程式的方式進行驗證

  • 呼叫驗證控制項的 Validate 方法。

    控制項將會執行它的檢查,並設定控制項和網頁的 IsValid 屬性。如果偵測到錯誤,當網頁傳回給使用者時,將如往常般地顯示錯誤訊息。

    下列程式碼範例會顯示如何以程式設計的方式設定屬性。在這個範例中,ASP.NET Web 網頁的功能是接受遊客預約在住宿期間,要享受渡假村提供之免費旅遊行程的時間。使用者必須輸入到達的日期以及離開的日期,然後計劃他們遊覽期間的旅程。RangeValidator 控制項可用來確保使用者會輸入一般的日期格式,且旅遊日期會介於到達和離開的日期之間。

    注意事項:

    如果使用者輸入的值無法轉換為日期,驗證程式控制項將會擲回例外狀況。為了清楚起見,這個範例並不包含錯誤處理。

    到達和離開日期會來自網頁上的兩個 TextBox Web 伺服器控制項:txtArrival 和 txtDeparture。旅遊的日期是在第三個 TextBox 控制項 (txtTourDate) 中輸入,並由 RangeValidator 控制項進行驗證。

    注意事項:

    以程式的方式進行驗證時,您應該停用用戶端指令碼,這樣控制項才不會在您的伺服器端驗證程式碼執行之前,顯示錯誤的錯誤訊息。如需詳細資訊,請參閱 HOW TO:停用 ASP.NET 伺服器控制項的驗證

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles Button1.Click
        RangeValidator1.MinimumValue = txtArrival.Text
        RangeValidator1.MaximumValue = txtDeparture.Text
        RangeValidator1.Type = ValidationDataType.Date
        RangeValidator1.Validate()
    
        If Not RangeValidator1.IsValid Then
            RangeValidator1.ErrorMessage = "The tour date must " & _
            "fall between the arrival and departure dates."
        End If
    End Sub
    
    private void Button1_Click(object sender, System.EventArgs e)
    {
        RangeValidator1.MinimumValue = txtArrival.Text;
        RangeValidator1.MaximumValue = txtDeparture.Text;
        RangeValidator1.Type = ValidationDataType.Date;
        RangeValidator1.Validate();
    
        if (!RangeValidator1.IsValid)
        {
            RangeValidator1.ErrorMessage = "The tour date must " +
            "fall between the arrival and departure dates.";
        }
    }
    

請參閱

概念

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

其他資源

驗證 ASP.NET 控制項