明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

深入講解 ASP+ 驗(yàn)證(一)

[摘要]Anthony Moore Microsoft Corporation 2000年10月摘要:有關(guān)使用 ASP+ 驗(yàn)證 Web 控件的詳細(xì)講解簡介 這篇文章詳細(xì)講解了 ASP+ 驗(yàn)證控件的工作方式。...
Anthony Moore
Microsoft Corporation
2000年10月
摘要:有關(guān)使用 ASP+ 驗(yàn)證 Web 控件的詳細(xì)講解
簡介

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


入門

我們知道,在整個 ASP+ 開發(fā)過程中,了解驗(yàn)證非常重要。看看如今的大多數(shù)商業(yè) Web 站點(diǎn),您會發(fā)現(xiàn),這些站點(diǎn)中有許多表單,這些表單明顯是通過執(zhí)行大量手寫的代碼來執(zhí)行驗(yàn)證。編寫驗(yàn)證代碼并不是一件有趣的工作。如果要通過編寫代碼來顯示數(shù)據(jù)表或動態(tài)生成圖表,可能會很吸引人,但是沒有人可以向他的同事證實(shí)這種很“酷”的方法能夠禁止在姓名字段中輸入空值。

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

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

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

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

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


何時發(fā)生何事?

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

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