ASP.NET2.0服務器控件之實現驗證控件
為了更好的創建交互式Web應用程序,加強應用程序安全性(例如,防止腳本入侵等),開發人員應該對用戶輸入的部分提供驗證功能。過去,輸入驗證功能基本由自行編寫的客戶端腳本來完成這種實現方法既繁瑣,又容易出現錯誤。隨著技術的發展,ASP.NET技術通過提供一系列驗證控件來克服這些缺點,例如,RequiredFieldValidator、CompareValidator、RangeValidator等。使用這些驗證控件,開發人員可以向Web頁面添加輸入驗證功能,例如定義驗證規則、定義向用戶顯示的錯誤信息內容等。通常情況下,ASP.NET提供的驗證控件可以滿足大多數Web應用的需要,然而,在某些情況下,內置的驗證控件還是無法完成應用需求對數據輸入的特殊要求。為了彌補這個缺憾,ASP.NET 2.0定義了一個可以在控件開發中使用的可擴充驗證框架。開發人員可以通過使用這個驗證框架自行定義驗證控件。本文將對實現驗證控件的重要方面進行介紹,內容包括內置驗證控件概述,驗證框架等等。
1. 內置驗證控件概述
驗證控件完成對輸入數據進行驗證的功能。通過將驗證控件和輸入控件關聯,開發人員可以向Web頁面添加輸入驗證功能。另外,還提供了自定義驗證規則的方法和自定義錯誤信息的內容和顯示方式等。本節將概括性介紹ASP.NET內置驗證控件。
ASP.NET 2.0共包含5個內置驗證控件:RequiredFieldValidator、CompareValidator、RangeValidator、RegularExpressionValidator和CustomValidator,這些控件直接或者間接派生自System.Web.UI.WebControls.BaseValidator。每個驗證控件執行特定類型的驗證,并且當驗證失敗時顯示自定義消息。下面簡要介紹了這5個驗證控件。
(1)RequiredFieldValidator控件
該控件用于確保被驗證的控件中包含一個值。
(2)CompareValidator控件
該控件使用比較運算符(小于、等于、大于等)將用戶輸入與一個常量值或另一控件的屬性值進行比較。
(3)RangeValidator控件
該控件用于檢查用戶的輸入是否在指定的上下限內。可以檢查數字對、字母字符對和日期對的范圍。
(4)RegularExpressionValidator控件
該控件用于檢查項與正則表達式定義的模式是否匹配。這種驗證類型允許檢查可預知的字符序列,如身份證號碼、電子郵件地址、電話號碼、郵政編碼等中的字符序列。
(5)CustomValidator控件
該控件用于使用您自己編寫的驗證邏輯檢查用戶輸入。這種驗證類型允許檢查在運行時導出的值。
除以上內置驗證控件外,ASP.NET 2.0還提供了一個用于顯示錯誤信息概要的控件ValidationSummary。該控件的目的是將來自頁上所有驗證控件的錯誤信息,一起顯示在一個位置,例如,一個消息框或者一個錯誤信息列表。ValidationSummary控件不執行驗證,但是它可以和所有驗證控件一起使用,更準確的說,ValidationSummary可以和上述5個內置驗證控件以及自定義驗證控件,共同完成驗證功能。
在Web頁面中使用驗證控件,我們需要注意以下幾個關鍵的方面。
首先,將驗證控件與輸入控件關聯起來,然后,根據不同類型驗證控件的特征定義相關屬性。例如:所有驗證控件都要通過ContrlToValidate屬性進行關聯設置,都必須通過ErrorMessage屬性定義錯誤信息內容;對于范圍檢查控件RangeValidator來講,必須定義MaximumValue和MinimumValue屬性來指定有效范圍的最小值和最大值;對于模式匹配控件RegularExpressionValidator來講,必須使用ValidationExpression屬性指定用于驗證輸入控件的正則表達式。以上介紹的使用方式,很可能使得一個輸入控件關聯多個驗證控件,這在ASP.NET 2.0中是允許的。
其次,ASP.NET 2.0中為驗證控件提供了一個新屬性ValidationGroup。開發人員可使用使用該屬性將單個控件與驗證組相關聯,然后,使用多個ValidationSummary控件收集和報告這些組的錯誤。如果未指定驗證組,則驗證功能等效于ASP.NET 1.x中的驗證功能。如果在多個控件中指定了多個驗證組,則一定會顯示多個驗證摘要控件,因為一個驗證摘要只顯示一個組的驗證錯誤。回發到服務器且當前具有CausesValidation屬性的控件也引入了此ValidationGroup屬性,該屬性確定當控件導致回發時應當驗證的控件組。如果未指定驗證組,則會驗證默認組,默認組由所有沒有顯式分配組的驗證程序組成。
最后,一旦在Web頁面中正確包含驗證控件,那么開發人員就可以使用自己的代碼來測試頁或者單個驗證控件的狀態。例如,在使用輸入數據之前來測試驗證控件的IsValid屬性。如果為true,表示輸入數據有效;如果為false,表示輸入錯誤,并顯示錯誤信息。對于Web頁面來講,只有當所有驗證控件的IsValid都為true,即所有輸入數據都符合驗證條件時,Page類的IsValid屬性才設置為true,否則為false。另外,在頁面級驗證中,ASP.NET 2.0還提供了兩個新方法來支持驗證功能。一個是來自Page類的GetValidators方法,該方法將檢索屬于指定驗證組的驗證程序。還有一個也是來自Page類的Validate方法的重載,其允許采用驗證組作為參數。
2. 驗證控件實現機制
通常情況下,使用ASP.NET 2.0的5個內置驗證控件,可以滿足多數應用程序的需要。然而,為了提高開發的靈活性,滿足不同Web應用的需求,ASP.NET 2.0內置了一個可擴充的驗證框架。該框架定義了服務器端和客戶端的基本實現規則。開發人員可以使用這個可擴充的驗證框架,根據應用需要設計自己的驗證控件來實現新的設計規則。
(1)服務器端實現機制
并非所有的Web服務器控件都支持驗證控件。可以使用驗證控件進行驗證的標準控件包括:TextBox、ListBox、DropDownList、RadioButtonList、HtmlInputText、HtmlInputFile、HtmlSelect和HtmlTextArea、FileUpload和HtmlInputPassword等。這些支持驗證控件的控件有一個共同特征,即元數據中包含System.Web.UI.ValidationPropertyAttribute。ValidationPropertyAttribute定義了控件用于標識驗證屬性的元數據特性。除此之外,如果由以上控件派生的自定義控件類,需要支持驗證,那么必須在控件類前定義ValidationPropertyAttribute,這樣該控件才能作為驗證目標控件。開發人員在實現自定義驗證控件過程中,必須首先了解以上所介紹的驗證目標控件內容,然后才能更好的開發控件。
為了實現自定義驗證控件,ASP.NET 2.0提供了3個重要對象:(1)System.Web.UI.IValidator;(2)System.Web.UI.WebControls.BaseValidator;(3)System.Web.UI.WebControls.CustomValidator。以上三者之間聯系緊密,由它們組成的驗證框架具有很強的靈活性和可擴充性。IValidator接口是驗證框架的基礎,任何實現該接口的類都可以作為驗證程序。BaseValidator是抽象基類,該類實現IValidator接口,并繼承System.Web.UI.WebControls.Label控件。通常情況下,自定義驗證控件都派生自該類。CustomValidator實際是一個驗證控件,開發人員可以用它來添加自定義的驗證邏輯。為了更好的說明驗證框架,下面將逐一介紹以上3個對象。
IValidator接口的定義如下:
IValidator接口的成員包括1個方法和2個屬性。ErrorMessage屬性用于獲取或設置條件驗證失敗時生成的錯誤信息。IsValid屬性當由類實現時,獲取或設置一個值,通過該值指示用戶在指定控件中輸入的內容是否通過驗證。Validate方法由類實現時,計算它檢查的條件并更新IsValid屬性。對于開發人員來講,如果實現的是一個普通驗證程序,而非驗證控件,那么可以通過實現該接口來完成。其原因在于驗證框架的實現分布在Page類、BaseValidator類和驗證目標控件中。這些類之間的相關性不允許任意實現IValidator接口。對于實現自定義驗證控件,推薦的方法是繼承BaseValidator類。
BaseValidator是驗證框架中最為重要的部分。該類派生自Label類,并且實現IValidator接口。無論是內置驗證控件,還是自定義驗證控件,都必須派生自BaseValidator類。該類實現所有驗證控件都必須實現的通用屬性。下面介紹了一些常用驗證屬性。
· ControlToValidate屬性
該屬性值為String類型,其用于驗證控件將計算的輸入控件的編程ID。如果此為非法ID,則引發異常。
· Display屬性
該屬性值為ValidatorDisplay類型,其用于指定的驗證控件的顯示行為。此屬性可以為下列值之一:(1)None—驗證控件從不內聯顯示。如果希望僅在ValidationSummary控件中顯示錯誤信息,則使用此選項。(2)Static—如果驗證失敗,驗證控件顯示錯誤信息。即使輸入控件通過了驗證,也在Web頁中為每個錯誤信息分配空間。當驗證控件顯示其錯誤信息時,頁面布局不變。由于頁面布局是靜態的,同一輸入控件的多個驗證控件必須占據頁上的不同物理位置。(3)Dynamic—如果驗證失敗,驗證控件顯示錯誤信息。當驗證失敗時,在頁上動態分配錯誤信息的空間。這允許多個驗證控件共享頁面上的同一個物理位置。注意:由于驗證控件的空間是動態創建的,所以頁面的物理布局會發生更改。為了防止頁面布局在驗證控件變得可見時更改,必須調整包含驗證控件的HTML元素的大小,使其大得足以容納驗證控件的最大大小。
· ErrorMessage屬性
該屬性值為String類型,其用于當驗證失敗時,在ValidationSummary控件中顯示的錯誤信息。如果未設置驗證控件的Text屬性,則驗證失敗時,驗證控件中仍顯示此文本。ErrorMessage屬性通常用于為驗證控件和ValidationSummary控件提供各種消息。注意:此屬性不會將特殊字符轉換為HTML實體。例如,小于號字符(<)不轉換為<。這允許將HTML元素(如<IMG>元素)嵌入到該屬性的值中
· IsValid屬性
該屬性值為bool類型,其用于指示ControlToValidate屬性所指定的輸入控件是否被確定為有效。
由該類派生的驗證控件,可以不必再次實現以上通用屬性,而只要根據應用需要另外定義一些屬性和驗證邏輯即可。例如,對于RangeValidator控件,除具有以上通用屬性外,還定義了用于限定取值范圍的MinimumValue和MaximumValue屬性,以及用于指定要比較的值的數據類型的Type屬性。此外,該控件的驗證邏輯是通過重寫BaseValidator.EvaluateIsValid方法實現的。由此看來,BaseValidator簡化了自定義驗證控件的實現過程,為控件開發人員提供了方便。
CustomValidator派生自BaseValidator類,它是5個內置驗證控件之一。通常情況下,頁面開發者使用CustomValidator來添加自定義的驗證邏輯,這只要通過定義ServerValidate事件的事件處理方法以及ClientValidationFunction屬性來完成。由于CustomValidator不提供復用機制(訪問屬性為public),因此自定義驗證控件不能自該類派生。
(2)客戶端實現機制
上文介紹了為實現驗證控件,開發人員必須掌握的3個核心對象。掌握這些對象的定義和使用方法對于開發驗證控件具有重要意義。通過它們,我們可以在服務器驗證中添加驗證邏輯。當頁面回傳時,驗證目標控件的輸入數據被發往服務器端參與驗證邏輯。如果輸入數據不能滿足驗證條件,那么頁面將重新呈現,并且要求用戶再次進行輸入。整個驗證過程可能需要多次往返,這樣必然降低應用程序的易用性,并給服務器增加負擔。
為了解決以上問題,開發人員必須學會為驗證控件添加客戶端驗證機制。如果用戶的瀏覽器支持DHTML和JavaScript技術,并且頁面和驗證控件的EnableClientScript均設置為true,那么就可以在客戶端執行驗證。客戶端驗證通過在向服務器發送用戶輸入前,檢查用戶輸入、改變一些頁面效果來增強驗證過程。例如,通過在客戶端檢測輸入錯誤,從而避免服務器端驗證所需要的信息來回傳遞。服務器端驗證總是要被執行的,這看起來好像是與客戶端驗證產生了重復,實際不然。出于安全考慮,如果某些用戶通過手工提交惡意數據,而繞過客戶端驗證,那么服務器端驗證的執行將對保護應用程序的安全性,甚至為服務器的安全性提供有力支持。
在ASP.NET 2.0中,如果開發人員使用內置驗證控件實現驗證功能,那么ASP.NET 2.0將自動產生相關的JavaScript代碼。如果開發人員查看相關HTML源代碼,那么將會發現有些來自WebResource.axd的JavaScript文件鏈接。然而,我們是無法查看相關文件代碼的。這一點與ASP.NET 1.x不同。在ASP.NET 1.x中,默認情況下,在目錄“C:Inetpubwwwrootaspnet_clientsystem_web版本號”中包含一個WebUIValidation.js文件。該文件中包括了實現客戶端驗證的JavaScript代碼。開發人員可以通過閱讀這些代碼來了解驗證功能的具體實現方法。ASP.NET 2.0中沒有存在相關的源代碼文件,而是通過WebResource.axd等機制來實現。
有關實現客戶端驗證的內容,主要涉及實現客戶端功能等知識。這些內容在前面的文章中已經詳細進行了講解。有興趣的讀者可閱讀有關文章。
3. 小結
本文主要介紹了內置驗證控件,以及自定義驗證控件實現機制。實際上,如果讀者開發自行實現驗證控件時,將會發現這個過程需要很多知識。例如,服務器端編程語言、JavaScript、CSS、DHTML等等。因此,如果讀者希望創建高質量的驗證控件,那么不僅要了解相關知識,而且必須達到精通的水平。
1. 內置驗證控件概述
驗證控件完成對輸入數據進行驗證的功能。通過將驗證控件和輸入控件關聯,開發人員可以向Web頁面添加輸入驗證功能。另外,還提供了自定義驗證規則的方法和自定義錯誤信息的內容和顯示方式等。本節將概括性介紹ASP.NET內置驗證控件。
ASP.NET 2.0共包含5個內置驗證控件:RequiredFieldValidator、CompareValidator、RangeValidator、RegularExpressionValidator和CustomValidator,這些控件直接或者間接派生自System.Web.UI.WebControls.BaseValidator。每個驗證控件執行特定類型的驗證,并且當驗證失敗時顯示自定義消息。下面簡要介紹了這5個驗證控件。
(1)RequiredFieldValidator控件
該控件用于確保被驗證的控件中包含一個值。
(2)CompareValidator控件
該控件使用比較運算符(小于、等于、大于等)將用戶輸入與一個常量值或另一控件的屬性值進行比較。
(3)RangeValidator控件
該控件用于檢查用戶的輸入是否在指定的上下限內。可以檢查數字對、字母字符對和日期對的范圍。
(4)RegularExpressionValidator控件
該控件用于檢查項與正則表達式定義的模式是否匹配。這種驗證類型允許檢查可預知的字符序列,如身份證號碼、電子郵件地址、電話號碼、郵政編碼等中的字符序列。
(5)CustomValidator控件
該控件用于使用您自己編寫的驗證邏輯檢查用戶輸入。這種驗證類型允許檢查在運行時導出的值。
除以上內置驗證控件外,ASP.NET 2.0還提供了一個用于顯示錯誤信息概要的控件ValidationSummary。該控件的目的是將來自頁上所有驗證控件的錯誤信息,一起顯示在一個位置,例如,一個消息框或者一個錯誤信息列表。ValidationSummary控件不執行驗證,但是它可以和所有驗證控件一起使用,更準確的說,ValidationSummary可以和上述5個內置驗證控件以及自定義驗證控件,共同完成驗證功能。
在Web頁面中使用驗證控件,我們需要注意以下幾個關鍵的方面。
首先,將驗證控件與輸入控件關聯起來,然后,根據不同類型驗證控件的特征定義相關屬性。例如:所有驗證控件都要通過ContrlToValidate屬性進行關聯設置,都必須通過ErrorMessage屬性定義錯誤信息內容;對于范圍檢查控件RangeValidator來講,必須定義MaximumValue和MinimumValue屬性來指定有效范圍的最小值和最大值;對于模式匹配控件RegularExpressionValidator來講,必須使用ValidationExpression屬性指定用于驗證輸入控件的正則表達式。以上介紹的使用方式,很可能使得一個輸入控件關聯多個驗證控件,這在ASP.NET 2.0中是允許的。
其次,ASP.NET 2.0中為驗證控件提供了一個新屬性ValidationGroup。開發人員可使用使用該屬性將單個控件與驗證組相關聯,然后,使用多個ValidationSummary控件收集和報告這些組的錯誤。如果未指定驗證組,則驗證功能等效于ASP.NET 1.x中的驗證功能。如果在多個控件中指定了多個驗證組,則一定會顯示多個驗證摘要控件,因為一個驗證摘要只顯示一個組的驗證錯誤。回發到服務器且當前具有CausesValidation屬性的控件也引入了此ValidationGroup屬性,該屬性確定當控件導致回發時應當驗證的控件組。如果未指定驗證組,則會驗證默認組,默認組由所有沒有顯式分配組的驗證程序組成。
最后,一旦在Web頁面中正確包含驗證控件,那么開發人員就可以使用自己的代碼來測試頁或者單個驗證控件的狀態。例如,在使用輸入數據之前來測試驗證控件的IsValid屬性。如果為true,表示輸入數據有效;如果為false,表示輸入錯誤,并顯示錯誤信息。對于Web頁面來講,只有當所有驗證控件的IsValid都為true,即所有輸入數據都符合驗證條件時,Page類的IsValid屬性才設置為true,否則為false。另外,在頁面級驗證中,ASP.NET 2.0還提供了兩個新方法來支持驗證功能。一個是來自Page類的GetValidators方法,該方法將檢索屬于指定驗證組的驗證程序。還有一個也是來自Page類的Validate方法的重載,其允許采用驗證組作為參數。
2. 驗證控件實現機制
通常情況下,使用ASP.NET 2.0的5個內置驗證控件,可以滿足多數應用程序的需要。然而,為了提高開發的靈活性,滿足不同Web應用的需求,ASP.NET 2.0內置了一個可擴充的驗證框架。該框架定義了服務器端和客戶端的基本實現規則。開發人員可以使用這個可擴充的驗證框架,根據應用需要設計自己的驗證控件來實現新的設計規則。
(1)服務器端實現機制
并非所有的Web服務器控件都支持驗證控件。可以使用驗證控件進行驗證的標準控件包括:TextBox、ListBox、DropDownList、RadioButtonList、HtmlInputText、HtmlInputFile、HtmlSelect和HtmlTextArea、FileUpload和HtmlInputPassword等。這些支持驗證控件的控件有一個共同特征,即元數據中包含System.Web.UI.ValidationPropertyAttribute。ValidationPropertyAttribute定義了控件用于標識驗證屬性的元數據特性。除此之外,如果由以上控件派生的自定義控件類,需要支持驗證,那么必須在控件類前定義ValidationPropertyAttribute,這樣該控件才能作為驗證目標控件。開發人員在實現自定義驗證控件過程中,必須首先了解以上所介紹的驗證目標控件內容,然后才能更好的開發控件。
為了實現自定義驗證控件,ASP.NET 2.0提供了3個重要對象:(1)System.Web.UI.IValidator;(2)System.Web.UI.WebControls.BaseValidator;(3)System.Web.UI.WebControls.CustomValidator。以上三者之間聯系緊密,由它們組成的驗證框架具有很強的靈活性和可擴充性。IValidator接口是驗證框架的基礎,任何實現該接口的類都可以作為驗證程序。BaseValidator是抽象基類,該類實現IValidator接口,并繼承System.Web.UI.WebControls.Label控件。通常情況下,自定義驗證控件都派生自該類。CustomValidator實際是一個驗證控件,開發人員可以用它來添加自定義的驗證邏輯。為了更好的說明驗證框架,下面將逐一介紹以上3個對象。
IValidator接口的定義如下:
| public interface Ivalidator { string ErrorMessage {get; set;} bool IsValid {get; set;} void Validate(); } |
IValidator接口的成員包括1個方法和2個屬性。ErrorMessage屬性用于獲取或設置條件驗證失敗時生成的錯誤信息。IsValid屬性當由類實現時,獲取或設置一個值,通過該值指示用戶在指定控件中輸入的內容是否通過驗證。Validate方法由類實現時,計算它檢查的條件并更新IsValid屬性。對于開發人員來講,如果實現的是一個普通驗證程序,而非驗證控件,那么可以通過實現該接口來完成。其原因在于驗證框架的實現分布在Page類、BaseValidator類和驗證目標控件中。這些類之間的相關性不允許任意實現IValidator接口。對于實現自定義驗證控件,推薦的方法是繼承BaseValidator類。
BaseValidator是驗證框架中最為重要的部分。該類派生自Label類,并且實現IValidator接口。無論是內置驗證控件,還是自定義驗證控件,都必須派生自BaseValidator類。該類實現所有驗證控件都必須實現的通用屬性。下面介紹了一些常用驗證屬性。
· ControlToValidate屬性
該屬性值為String類型,其用于驗證控件將計算的輸入控件的編程ID。如果此為非法ID,則引發異常。
· Display屬性
該屬性值為ValidatorDisplay類型,其用于指定的驗證控件的顯示行為。此屬性可以為下列值之一:(1)None—驗證控件從不內聯顯示。如果希望僅在ValidationSummary控件中顯示錯誤信息,則使用此選項。(2)Static—如果驗證失敗,驗證控件顯示錯誤信息。即使輸入控件通過了驗證,也在Web頁中為每個錯誤信息分配空間。當驗證控件顯示其錯誤信息時,頁面布局不變。由于頁面布局是靜態的,同一輸入控件的多個驗證控件必須占據頁上的不同物理位置。(3)Dynamic—如果驗證失敗,驗證控件顯示錯誤信息。當驗證失敗時,在頁上動態分配錯誤信息的空間。這允許多個驗證控件共享頁面上的同一個物理位置。注意:由于驗證控件的空間是動態創建的,所以頁面的物理布局會發生更改。為了防止頁面布局在驗證控件變得可見時更改,必須調整包含驗證控件的HTML元素的大小,使其大得足以容納驗證控件的最大大小。
· ErrorMessage屬性
該屬性值為String類型,其用于當驗證失敗時,在ValidationSummary控件中顯示的錯誤信息。如果未設置驗證控件的Text屬性,則驗證失敗時,驗證控件中仍顯示此文本。ErrorMessage屬性通常用于為驗證控件和ValidationSummary控件提供各種消息。注意:此屬性不會將特殊字符轉換為HTML實體。例如,小于號字符(<)不轉換為<。這允許將HTML元素(如<IMG>元素)嵌入到該屬性的值中
· IsValid屬性
該屬性值為bool類型,其用于指示ControlToValidate屬性所指定的輸入控件是否被確定為有效。
由該類派生的驗證控件,可以不必再次實現以上通用屬性,而只要根據應用需要另外定義一些屬性和驗證邏輯即可。例如,對于RangeValidator控件,除具有以上通用屬性外,還定義了用于限定取值范圍的MinimumValue和MaximumValue屬性,以及用于指定要比較的值的數據類型的Type屬性。此外,該控件的驗證邏輯是通過重寫BaseValidator.EvaluateIsValid方法實現的。由此看來,BaseValidator簡化了自定義驗證控件的實現過程,為控件開發人員提供了方便。
CustomValidator派生自BaseValidator類,它是5個內置驗證控件之一。通常情況下,頁面開發者使用CustomValidator來添加自定義的驗證邏輯,這只要通過定義ServerValidate事件的事件處理方法以及ClientValidationFunction屬性來完成。由于CustomValidator不提供復用機制(訪問屬性為public),因此自定義驗證控件不能自該類派生。
(2)客戶端實現機制
上文介紹了為實現驗證控件,開發人員必須掌握的3個核心對象。掌握這些對象的定義和使用方法對于開發驗證控件具有重要意義。通過它們,我們可以在服務器驗證中添加驗證邏輯。當頁面回傳時,驗證目標控件的輸入數據被發往服務器端參與驗證邏輯。如果輸入數據不能滿足驗證條件,那么頁面將重新呈現,并且要求用戶再次進行輸入。整個驗證過程可能需要多次往返,這樣必然降低應用程序的易用性,并給服務器增加負擔。
為了解決以上問題,開發人員必須學會為驗證控件添加客戶端驗證機制。如果用戶的瀏覽器支持DHTML和JavaScript技術,并且頁面和驗證控件的EnableClientScript均設置為true,那么就可以在客戶端執行驗證。客戶端驗證通過在向服務器發送用戶輸入前,檢查用戶輸入、改變一些頁面效果來增強驗證過程。例如,通過在客戶端檢測輸入錯誤,從而避免服務器端驗證所需要的信息來回傳遞。服務器端驗證總是要被執行的,這看起來好像是與客戶端驗證產生了重復,實際不然。出于安全考慮,如果某些用戶通過手工提交惡意數據,而繞過客戶端驗證,那么服務器端驗證的執行將對保護應用程序的安全性,甚至為服務器的安全性提供有力支持。
在ASP.NET 2.0中,如果開發人員使用內置驗證控件實現驗證功能,那么ASP.NET 2.0將自動產生相關的JavaScript代碼。如果開發人員查看相關HTML源代碼,那么將會發現有些來自WebResource.axd的JavaScript文件鏈接。然而,我們是無法查看相關文件代碼的。這一點與ASP.NET 1.x不同。在ASP.NET 1.x中,默認情況下,在目錄“C:Inetpubwwwrootaspnet_clientsystem_web版本號”中包含一個WebUIValidation.js文件。該文件中包括了實現客戶端驗證的JavaScript代碼。開發人員可以通過閱讀這些代碼來了解驗證功能的具體實現方法。ASP.NET 2.0中沒有存在相關的源代碼文件,而是通過WebResource.axd等機制來實現。
有關實現客戶端驗證的內容,主要涉及實現客戶端功能等知識。這些內容在前面的文章中已經詳細進行了講解。有興趣的讀者可閱讀有關文章。
3. 小結
本文主要介紹了內置驗證控件,以及自定義驗證控件實現機制。實際上,如果讀者開發自行實現驗證控件時,將會發現這個過程需要很多知識。例如,服務器端編程語言、JavaScript、CSS、DHTML等等。因此,如果讀者希望創建高質量的驗證控件,那么不僅要了解相關知識,而且必須達到精通的水平。