3.1 ASP.net解決了ASP的難題:驗證表單填寫的正確性
如今的商業網站,或者個人網站,多少都有客戶調查啊,用戶注冊之類的東西,必然會用到表單,這些表單的填寫正確與否,明顯是由手寫代碼的方式來控制的。我承認編寫代碼,是一項有趣的工作,不過每次驗證表單都來手寫代碼,我們希望提高我們的工作效率,並不是把我們很有限的時間花在表單的驗證工作上。
基於另外的一些原因,Web應用程序很不好驗證用戶的輸入,HTML 3.2 規范可以讓你控制用戶的反饋,但惡意的或者技術高超的用戶可以繞過,因此即使有了浏覽器端的手寫代碼,服務器端同樣也需要驗證,才能保證安全。
下面是微軟的工作人員,給出的商業網站用手寫代碼控制表單驗證的弊病。
1.盡管錯誤信息或圖標經常與輸入元素相鄰,但是它們幾乎總是位於表的不同單元格中。
2.頁面中經常會有一個區域來匯總所有錯誤。
3.許多站點包含客戶端腳本,以便提供更快捷的反饋,同時防止白白地在與服務器之間往返。
4.許多包含客戶端腳本的站點在出現錯誤時會顯示信息框。
5.不僅會驗證文本輸入,還會驗證下拉列表和單選按鈕。
6.如果某個字段為空,站點通常會顯示與該條目無效時不同的信息或圖標。
7.許多有效性檢查可以很好地代替常用的表達式。
8.驗證通常是基於兩個輸入之間的比較結果。
9.90% 或 90% 以上的驗證任務是一些常見的操作,例如檢查姓名或郵政編碼。大多數站點似乎仍在重復進行這些工作。
10.因為站點之間的差別通常太大,無法獲得一種完美的解決方案來處理每個站點的所有驗證任務。
如果你想向你的同事證實你有一種很"酷"的方法,可以禁止在姓名字段裡面輸入空值,記得選擇ASP.net,並且看下面的教程。
3.2 ASP.net進行表單驗證的過程
1.aspx文件被編譯,運行
2.用戶輸入數據
3.觸發Page_Load事件
4.更改Web控件屬性,提示哪裡沒有輸入
5.將頁面用Html重新輸出給用戶
6.再次提醒用戶輸入
3.3 Page_Load 過程
Page 對象包含一些與服務器端驗證有關的重要屬性和方法。下表列出了Page_Load屬性的所有Collect和methed。
Page_Load方法名 說明 IsValid(最經常使用) 這是最有用的屬性。該屬性可以檢查整個表單是否有效。通常在更新數據庫之前進行該檢查。只有 Validators 集中的所有對象全部有效,該屬性才為真,並且不將該值存入緩存 。 Validators 該頁所有驗證對象的集合。這是實現 IValidator 界面的對象的集合。 Validate 在驗證時調用的一種方法。在 Page 對象上默認的執行方式是轉至每個驗證器,並要求各驗證器自行評估。