上篇文章Asp.net MVC驗證那些事(1)-- 介紹和驗證規則使用中,介紹了Asp.net MVC中的驗證功能以及如何使用。這里將對MVC中內置的驗證規則進行總結。
一,查找所有驗證規則
上篇文章中提到,所有的驗證規則都是位於下面的命名空間下:
using System.ComponentModel.DataAnnotations;
我們可以用ILSpy反編譯工具,看看這個命名空間下都有些什么. 下面的圖讓我們一目了然,在這個命名空間下,.net為我們提供了那些驗證規則。
不過,有三點需要注意:
1. 列出的類基本都是Attribute,如果不理解Attribute,可以看這里.Net Attribute詳解(上)-Attribute本質以及一個簡單示例
2. 正如Annotation的意識是“注釋”, 這個命名空間下的類的本質是為數據類型添加注釋和解釋。驗證規則也是一種注釋,是對於數據規范要求的注釋。
所以下面的所有類並不全是驗證規則, 比如DisplayAttribute使用與顯示,KeyAttribute常常用於定義主鍵, 以后有機會再和大家分享.
3. 之所以這些類不在System.Web命名空間下,是因為這些驗證規則是不單單用於MVC項目中的,實際上它們可以用於任何地方,MVC驗證只是其中一處。
二,使用驗證Attribute的Model
本文中,涉及的驗證規則,都應用到下面的Employee Model上, 對照下面的驗證規則的解釋,就能非常容易明白每項驗證功能的作用了。
public class Employee { public int EmpId { get; set; } [DisplayName("Employee Name")] [Required(ErrorMessage = "Employee Name is required")] [StringLength(100, MinimumLength = 3)] public String EmpName { get; set; } [DisplayName("Password")] [DataType(DataType.Password)] [Required] public string Password { get; set; } [CompareAttribute("Password")] [DataType(DataType.Password)] public string ConfirmPassword { get; set; } [Required(ErrorMessage = "Employee Address is required")] [StringLength(300)] public string Address { get; set; } [Required(ErrorMessage = "Salary is required")] [Range(3000, 10000000, ErrorMessage = "Salary must be between 3000 and 10000000")] public int Salary { get; set; } [DisplayName("Credit Card")] [CreditCard(ErrorMessage = "Please enter correct credit card number.")] public string CreditCardNumber { get; set; } [Required(ErrorMessage = "Please enter your email address")] [DataType(DataType.EmailAddress)] [Display(Name = "Email address")] [MaxLength(50)] [EmailAddress(ErrorMessage = "Please enter correct email")] public string Email { get; set; } }
三,具體驗證規則
下面就來一一介紹我們可以用於MVC項目中的驗證規則:
1. RequiredAttribute
必填項檢查,應用上該特性的字段,必須輸入值。
2. CompareAttribute
CompareAttribute用於比較2個屬性是否相同. 注冊用戶的時候,常常需要輸入2次密碼,其中一個是確認的密碼,要求2個密碼框中的密碼必須相同,這個時候就可以應用CompareAttribute
3. RangeAttribute
用來限定數據范圍,比如Age年齡字段,你可以限制數據必須在0~150之間。
4. StringLengthAttribute,MaxLengthAttribute和MinLengthAttribute
這3個都是用來對於字符串屬性長度進行驗證的。StringLength用來限定具體的長度,而后面的,一個是最大可輸入長度,一個是最小的輸入長度, 注意MaxLength和MinLength可以用於String和Array。
5. CreditCardAttribute驗證
這個是用來驗證信用卡的,支持多種類型信用卡的驗證。
6. EmailAddressAttribute和UrlAttribute
這個非常簡單,就是用來驗證Email格式和Url格式的
7. FileExtensionsAttribute
用來檢查文件名稱后綴。假如你禁止上傳.exe文件到服務器,這個時候,就可以通過它來做限制。
8. RegularExpressionAttribute
最后,如果上面的這些都無法符合你的要求,可以試試這個RegularExpressionAttribute. 它可以指定一個正則表達式作為驗證規則。