ASP.NET中的驗證控件
ASP.NET提供了如下的控件:
RequiredFieldValidator: 字段必填 (ControlTovalidate設定要驗證的控件)
RangeValidator: 值在給定的最大值,最小值之間()
CompareValidator: 用於比較兩個值的關系是否滿足要求或者是否是指定類型的數據
RegularExpressionValidator: 校驗數據滿足正則表達式
CustomValidator: 自定義驗證
Validator驗證控件的共性
IsValid屬性,用來判斷頁面中的所有Validator是否都校驗通過,只有都校驗通過才為True,
校驗數據時必需判斷該值,做出相應的措施
Display屬性, 所有的驗證控件都有,用來決定如何顯示錯誤作息,一共有三個值:
Static: 占位隱藏,visiblity樣式為hidden來實現隱藏
Dynamic: 不點位隱藏,display模式為none來實現隱藏
ValidationGroup屬性, 驗證組,當一個頁面同時放置註冊和登錄表單時,驗證就會同時進行,當登錄時,
註冊驗證也會觸發,可以使用驗證組來解決,將同一組的控件(表單,提交按鈕,Validator)
中的ValidationGroup屬性設置一樣就行了
如果將按鈕控件的CausesValidation屬性設置為false,則這個按鈕的點擊不觸發校驗
幾乎所有的控件都有ControlToValidat,Text屬性,所有控件都幾乎在客戶端和服務器端都要進行校驗
除了非空驗證控件外,其它幾個默認都不會對非空進行校驗,如果要不允許為空則需要手動設置
1. RequiredFieldValidator: 字段必填
ControlTovalidate 設定要驗證的控件
ErrorMessage 設置錯誤輸出信息與下面一樣
Text 為當被驗證的控件為空的時候顯示的錯誤信息,也可以寫任何HTML內容,有時候控件如果有默認值也要認為空值的話,只要將 InitialValue 設置為那個默認值就行
2. RangeValidator: 驗證值的範圍
ControlTovalidate 設定要驗證的控件
MinimumValue 最小值
MaximumValue 最大值
Type 類型(String,Integer,Double,Date,Currency等)
3. CompareValidator: 比較驗證控件
ControlTovalidate 設定要驗證的控件
Type 類型(String,Integer,Double,Date,Currency等)
Operator 比較操作符,可選值DataTypeCheck,Equal,GreaterThan,GreaterThanEqul等
ValueToCompare 比較指定的值
ControlToCompare 設定與另外一個控件進行比較
4. RegularExpressionValidator: 校驗數據滿足正則表達式
ControlTovalidate 設定要驗證的控件
ValidationExpression 指定正則表達式,自帶一些常用的
5. CustomValidator: 自定義驗證
ServerValidate事件 服務端校驗代碼,在事件處理讀取args.Value來獲得待校驗的值合法則將 args.IsValid 設置為true,否則為 false
ClientValidationFunction事件 客戶端校驗代碼(一個函數名),代碼需要手動在<script>中寫
//服務端驗證 設置 ServerValidate事件 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { if (args.Value == "1" ) { args.IsValid = true; //相等則返回 true } else { args.IsValid = false; //不相等則返回 false } }
//客戶端驗證 設置 ClientValidationFunction事件 <script type="text/javascript"> function test(src, args) { //必需要設置兩個參數src可隨便設置 if (args.Value == "1") { args.IsValid = true; //相等則返回 true } else { args.IsValid = false; //不相等則返回 false } } </script>
客戶端校驗
有些服務器端控件的ID會自動更改,如果用 javascript 去判斷,將會找不到ID,可用 ClientID 解決
如: <%=TextBox1.ClientID %> 會自動找到對應的客戶端ID
案例:根據用戶輸入的月份判斷用戶輸入的天數是否合法(如 2月29天),
如果用戶輸入2月份,天數輸入31,則不合法
用戶拉一個範圍驗證控件,與一個自定義驗證控件,驗證控件驗證月份是否在 1-12 月,
自定義驗證控件如下:
//服務端校驗 設置 ServerValidate事件 protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { int month = Convert.ToInt32(TextBox1.Text); //獲得用戶輸入月份 int day = Convert.ToInt32(args.Value); //獲得用戶輸入天數 //將每個月的天數存放在 int數組 int[] data = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int days = data[month-1]; //得到用戶輸入月的天數 args.IsValid = (day >= 1 && day <= days); //判斷用戶輸入的天數是否與程序相等 }
//客戶端校驗 設置 ClientValidationFunction事件 <script type="text/javascript"> function test(src, args) { var months = document.getElementById("<%=TextBox1.ClientID %>"); var month = parseInt(months.value,10); //獲得用戶輸入月份 var day = parseInt(args.Value,10); //獲得用戶輸入天數 var data = [31,29,31,30,31,30,31,31,30,31,30,31]; var days = data[month-1]; //得到用戶輸入月的天數 args.IsValid = (day >= 1 && day <= days); //判斷用戶輸入的天數是否與程序相等 } </script>
匯總錯誤消息
使用Validator錯誤消息會顯示在放置的位置,如果消息過長,希望把錯誤信息集中顯示
ValidationSummary控件用來集中顯示錯誤消息,第個驗證控件都有ErrorMessage,Text兩個屬性
ErrorMessage是用來顯示到ValidationSummary中的值,Text是用來顯示到Validator位置的值
如果Text為空,則ErrorMessage會同時顯示到ValidationSummary和控件的位置
一般Text的值要簡短(如"必填","*"),
ValidationSummary的屬性:
DiplayMode 顯示模式
ShowMessageBox 用戶同時顯示警告對話框
ASP.NET中的驗證控件