驗證可以確保使用者輸入符合您指定的條件。在大多數情況下,這一操作比較簡單。但有時對輸入進行驗證會引入特殊的條件。瞭解這些條件是什麼、驗證如何執行以及有哪些可能的驗證結果是非常重要的。
一、與空白欄位的對比
如果欄位為空白,則除 RequiredFieldValidator 控制項之外的所有驗證控制項都會將該欄位視為有效欄位。您必須使用 RequiredFieldValidator 控制項來避免使用者將欄位留為空白。例如,如果您將 RangeValidator 控制項附加到一個日期欄位,則當使用者輸入了指定範圍內的日期或將該欄位留為空白時,都將通過驗證。如果要確保使用者輸入日期,則除了範圍檢查之外,您還必須向該日期欄位添加 RequiredFieldValidator 控制項。
二、與其他控制項的對比
使用 CompareValidator 控制項時,您可以指定對照另一控制項的值執行驗證。例如,您有兩個用於輸入日期的欄位,一個用於開始日期,一個用於結束日期。使用 CompareValidator 控制項可以確保開始日期早於或等於結束日期。
安全記事: ASP.NET 網頁中的使用者輸入可能包括惡意的用戶端指令碼。預設情況下,該頁驗證使用者輸入是否不包括指令碼或 HTML 元素。
如果驗證控制項無法解析另一控制項中的值,它們通常不會引發錯誤,相反,將會通過驗證檢查。如果其他控制項中的值缺失,或者無法轉換為 CompareValidator 控制項的資料類型,則會發生這種情況。
由這些控制項執行的特定測試和可能的結果如下所示:
·如果在起始控制項的 ControlToValidate 屬性中輸入的目標控制項沒有值,則 IsValid 屬性被視為 true 並且驗證通過。
·如果 ControlToValidate 屬性中的目標控制項值無法轉換為適當的資料類型,則 IsValid 被視為 false。
·如果 ControlToCompare 屬性中的目標控制項值無法轉換為適當的資料類型,則 IsValid 被視為 true。
·最後,如果所有這些測試均已通過,則兩個控制項都為非空,並且可以轉換為資料類型,因此控制項將執行實際的比較並相應地設定 IsValid。
這一策略可以防止對同一無效輸入報告多個錯誤。驗證控制項設計用於只針對一個值來作出測試和報告,並在遇到錯誤時儘可能準確地顯示訊息。
例如,在結束日期的樣本中,假定使用者輸入一個無效開始日期。使用者隨後輸入結束日期。執行驗證檢查時(通常在伺服器上),同一錯誤日期可能會在開始日期欄位和結束日期欄位都引發錯誤。為避免這一情況的發生,結束日期驗證(依賴於另一欄位的驗證)將不引發錯誤。
因此,您應該確保為每個單獨的欄位提供了充分的驗證。在本例中,將由您來確保使用者在開始日期欄位中輸入了正確日期。在許多情況下,您應該將 RequiredFieldValidator 控制項和測試特定輸入內容的驗證控制項一起使用。在某些情況下,添加 Operator 屬性設定為 DataTypeCheck 的 CompareValidator 控制項也很有用,它將執行簡單的類型檢查,而不與另一值或控制項進行比較。