首頁(yè) > 開(kāi)發(fā) > Asp > 正文

深入講解 ASP+ 驗證(一)

2018-10-16 21:06:56
字體:
來(lái)源:轉載
供稿:網(wǎng)友
Anthony Moore
Microsoft Corporation
2000年10月
摘要:有關(guān)使用 ASP+ 驗證 Web 控件的詳細講解
簡(jiǎn)介

這篇文章詳細講解了 ASP+ 驗證控件的工作方式。如果要生成其中包含驗證控件的復雜頁(yè)面,或是要擴展驗證框架,建議您閱讀本文。如果要學(xué)習使用驗證控件,或是要決定是否使用驗證控件,請參見(jiàn)“ASP+ 中的用戶(hù)輸入驗證(英文)”。


入門(mén)

我們知道,在整個(gè) ASP+ 開(kāi)發(fā)過(guò)程中,了解驗證非常重要??纯慈缃竦拇蠖鄶瞪虡I(yè) Web 站點(diǎn),您會(huì )發(fā)現,這些站點(diǎn)中有許多表單,這些表單明顯是通過(guò)執行大量手寫(xiě)的代碼來(lái)執行驗證。編寫(xiě)驗證代碼并不是一件有趣的工作。如果要通過(guò)編寫(xiě)代碼來(lái)顯示數據表或動(dòng)態(tài)生成圖表,可能會(huì )很吸引人,但是沒(méi)有人可以向他的同事證實(shí)這種很“酷”的方法能夠禁止在姓名字段中輸入空值。

因為其它一些原因,Web 應用程序的驗證也是非常麻煩的。HTML 3.2 對您可以控制的內容或可以從用戶(hù)處得到的反饋的限制很多,因此無(wú)法應用在功能更全的客戶(hù)機上可以使用的技巧,例如禁止用戶(hù)輸入某些字符,或發(fā)出嘀聲。使用瀏覽器腳本可能會(huì )產(chǎn)生更強大的驗證。但是這種方法很難得以證實(shí),因為客戶(hù)瀏覽器中并非一定有腳本,并且惡意的用戶(hù)可以繞過(guò)。因此,為了保證站點(diǎn)安全,有必要對服務(wù)器進(jìn)行同樣的檢查。

在開(kāi)發(fā) ASP+ 時(shí),我們的初衷是只使用一個(gè)控件來(lái)處理驗證,可能本該是一個(gè)能夠顯示錯誤的 TextBox 控件??墒堑搅嗽O計該控件時(shí),卻發(fā)現無(wú)法實(shí)現這種愿望。我們研究了大量的數據輸入表單,試圖找到可以適用于盡可能多的表單的一種解決方案。我們發(fā)現,數據輸入表單具有許多有趣的特性:

盡管錯誤信息或圖標經(jīng)常與輸入元素相鄰,但是它們幾乎總是位于表的不同單元格中。
頁(yè)面中經(jīng)常會(huì )有一個(gè)區域來(lái)匯總所有錯誤。
許多站點(diǎn)包含客戶(hù)端腳本,以便提供更快捷的反饋,同時(shí)防止白白地在與服務(wù)器之間往返。
許多包含客戶(hù)端腳本的站點(diǎn)在出現錯誤時(shí)會(huì )顯示信息框。
不僅會(huì )驗證文本輸入,還會(huì )驗證下拉列表和單選按鈕。
如果某個(gè)字段為空,站點(diǎn)通常會(huì )顯示與該條目無(wú)效時(shí)不同的信息或圖標。
許多有效性檢查可以很好地代替常用的表達式。
驗證通常是基于兩個(gè)輸入之間的比較結果。
90% 或 90% 以上的驗證任務(wù)是一些常見(jiàn)的操作,例如檢查姓名或郵政編碼。大多數站點(diǎn)似乎仍在重復進(jìn)行這些工作。
因為站點(diǎn)之間的差別通常太大,無(wú)法獲得一種完美的解決方案來(lái)處理每個(gè)站點(diǎn)的所有驗證任務(wù)。
考慮了上述所有情況,最終獲得的解決方案包括五個(gè)驗證器控件、ValidationSummary 控件以及與 Page 對象的集成。同時(shí)很明顯,該解決方案需要擴展,在客戶(hù)機和服務(wù)器上均需要有一個(gè) API 來(lái)配合。

我們在研究進(jìn)行的各種驗證時(shí)發(fā)現,我們似乎需要一個(gè)更大的工具箱。在大多數組件環(huán)境中,例如 Microsoft® ActiveX®,我們可能本來(lái)試圖將所有驗證控件的功能集成到一個(gè)控件中,處理不同模式下的不同屬性。不過(guò),幸好 Microsoft® .NET 框架中有神奇的繼承性,可以提供一套控件來(lái)對特定的屬性進(jìn)行特定的驗證,因為派生每個(gè)新控件所需的額外工作量非常小。

這些控件所完成的大多數工作均在其公用的父級 BaseValidator 中實(shí)現。您也可以從 BaseValidator 或其它控件派生來(lái)完成各項工作。實(shí)際上,即使 BaseValidator 都懶得實(shí)現其自己的 Text 屬性,而是從 Label 屬性繼承。


何時(shí)發(fā)生何事?

在處理包含驗證 Web 控件的頁(yè)面時(shí),了解事件序列非常有效。如果某個(gè)驗證條件是可選的,您需要準確了解客戶(hù)機和服務(wù)器上何時(shí)進(jìn)行驗證。如果要自己編寫(xiě)驗證例程,可能會(huì )非常耗時(shí),或者有副作用。同時(shí),了解調用驗證例程的時(shí)機也很重要。

首先,讓我們看一下服務(wù)器。

發(fā)表評論 共有條評論
用戶(hù)名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選