HOW TO:以程式的方式驗證 ASP.NET 伺服器控制項
更新:2007 年 11 月
根據預設,當網頁回傳到伺服器時、在網頁初始化之後 (也就是在處理檢視狀態和回傳資料以後),以及在呼叫事件處理程式碼之前,ASP.NET 驗證控制項會自動執行驗證。如果瀏覽器支援用戶端指令碼,則控制項也會在瀏覽器中執行驗證。
但是,有時候您可能想要以程式設計方式自行執行驗證。您可能會在下列情況下以程式的方式進行驗證:
如果驗證值在執行階段前都還沒有設定時。例如,如果您正在使用 RangeValidator 控制項,可能會根據使用者所輸入的值,在執行階段設定它的 MinimumValue 和 MaximumValue 屬性 (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."; } }