ASP.NET 伺服器控制項的特殊狀況驗證結果
更新:2007 年 11 月
驗證可確保使用者的輸入符合您指定的條件。在大部分情況中,這是個簡單的作業。但是,在某些情況下,經驗證的輸入卻會引發特殊條件。重要的是您必須瞭解這些條件是什麼、如何執行驗證及驗證的結果可能是什麼。
與空白欄位相比較
除了 RequiredFieldValidator 控制項以外,所有驗證控制項都會將空白欄位視為有效。您必須使用 RequiredFieldValidator 控制項,預防使用者留下空白欄位。例如,如果您將 RangeValidator 控制項附加至日期欄位,若使用者輸入指定範圍內的日期或是將欄位留空,都將通過驗證。如果您希望確保使用者確實會輸入日期,則必須將 RequiredFieldValidator 控制項和範圍檢查一起加入至日期欄位。
與其他控制項相比較
使用 CompareValidator 控制項時,您可以指定要針對其他控制項值執行驗證。例如,您可能有兩個用來輸入日期的欄位,一個開始日期,一個是結束日期。使用 CompareValidator 控制項,您可以確保開始日期會小於或等於結束日期。
安全性注意事項: |
---|
在 ASP.NET Web 網頁中的使用者輸入可能會含有惡意的用戶端指令碼。根據預設,網頁會驗證該使用者的輸入內容中沒有包含指令碼或 HTML 項目。如需詳細資訊,請參閱指令碼攻擊概觀。 |
如果驗證控制項無法解析其他控制項的值,則不會提出錯誤,而會通過驗證。在其他控制項中的值遺失或無法轉換為 CompareValidator 控制項的資料型別時,就會發生這種情形。
這些控制項會執行特定的測試,可能的結果為:
如果在原始控制項的 ControlToValidate 屬性 (Property) 中輸入的目標控制項沒有任何值,IsValid 屬性就會被視為 true 並會通過驗證。
如果 ControlToValidate 屬性中的目標控制項值無法轉換為適當的資料型別,則 IsValid 會被視為 false。
如果 ControlToCompare 屬性中的目標控制項值無法轉換為適當的資料型別,則 IsValid 會被視為 true。
最後,如果所有的測試都通過了,則兩個控制項都不是空的且可轉換為該資料型別,因此控制項會執行實際的比較並適當地設定 IsValid。
這種策略可防止對同一個無效的輸入回報多個錯誤。驗證控制項是為了測試和回報單一值所設計,並可於發生錯誤時盡可能明確地顯示訊息。
例如,在結束日期的範例中,假設使用者輸入了無效的開始日期。接著使用者輸入了結束日期。執行驗證檢查後 (通常在伺服器端),相同的錯誤日期可能會同時對開始日期和結束日期欄位提出錯誤。為了防止這種情形發生,結束日期的驗證 (相依於其他欄位的驗證) 便不會提出錯誤。
因此您應該確保對每個個別欄位都提供了足夠的驗證。在範例中,確保使用者在開始日期欄位中輸入適當的日期是您要做的工作。在許多情況下,除了測試特定輸入內容的驗證控制項以外,您也應該將 RequiredFieldValidator 控制項納入。在某些情況中加入 CompareValidator 控制項並將它的 Operator 屬性設為DataTypeCheck 也很有幫助,這可執行簡單的型別檢查,而不與另一個值或控制項進行比較。