如果客戶端驗證打開,則在所有輸入域均包含有效數據之前,該頁不會回發。為了運行安全代碼,以及防止惡意和秘密的攻擊,您還是應該在服務器上驗證數據;服務器端驗證始終由驗證器控件執行,即使同時要執行客戶端驗證也是如此。另外,并非所有類型的驗證都能在客戶端上完成。實際上,如果您需要針對數據庫進行驗證,則沒有別的選擇,只能回發到服務器。而這也正是發生問題的地方。
常規回發涉及整個頁面。上載整個視圖狀態,處理整個頁面,生成、下載和呈現同樣的大型響應。如果您能夠向服務器發出經過優化的帶外請求,并只檢查驗證之下的控件的狀態,那豈不是很好?
在 ASP.NET 中,沒有這樣的控件。那么我們就來編寫一個這樣的控件吧,我將其命名為 CallbackValidator。CallbackValidator 是一個自定義 ASP.NET 2.0 控件,我構建這個控件的目的是為了演示控件可以如何實現對承載頁的帶外調用,以及如何在服務器上自行處理事件。
在我開始著手此項目時,實際上并沒有如此雄心勃勃的目標:我原先的目標只是修改 CustomValidator 標準控件。對于該記錄,CustomValidator 控件采用了以編程方式定義的驗證邏輯來檢查用戶輸入的有效性。如果預先不知道要檢查的值,則應該使用此方法。CallbackValidator 控件的最初意圖是提供一種方法,以便在不回發整個頁面的情況下執行服務器端驗證。我意識到無需太多的額外努力,就可以擁有一個類似于自定義按鈕的控件,這個控件可以在不回發整個頁面的情況下在服務器上對許多輸入域進行驗證,而此時我的修改工作已經完成了一半。這個行為就是 CallbackValidator 控件的全部。
在我深入講述該控件的精髓之前,我們先來看一下圖 1。該頁面上的 Submit 按鈕只會按照普通的方式將所有值發布到服務器上。實際上,這些值將在客戶端上進行處理,如果所有這些值都需要傳遞,那么該控件就會將其傳遞到服務器上,在該服務器上,所有控件輸入都將使用服務器端驗證代碼(如果有的話)進行驗證。Validate 按鈕會觸發一個對 Web 服務器的帶外調用,并只驗證指定的輸入控件。在它返回時,您就會知道哪些值已經通過了服務器的驗證。例如,在圖 1 中,您將在嘗試提交其余數據之前了解到是否已經采用了該用戶 ID。
文章來源于領測軟件測試網 http://www.kjueaiud.com/