ASP.NET MVC 中的数据注解和验证
1.验证注解的使用
数据注解的特性定义在名称控件System.ComponentModel.DataAnnotations。它们提供了服务器验证的功能,在model属性上使用这些特性。
Required:此标记下的字段表示,为必填项,当出现null或空时,Required特性将会引发一个验证错误。
StringLength:此标记下的字段,表示在输入时,必须小于或等于设置StringLength的值。此外,MinimumLength的参数是一个可选项,它可以用来设定字符串的最小长度。
RegularExpression:表示字段必须通过此标记的正则表达式。
Range:特性用来指定数值类型值的最小值和最大值。
Remote:可以利用服务器端的回调函数执行客户端的验证逻辑。在特性中可以设置客户端代码要调用的控制器名称和操作名称。(ASP.NET MVC 下特有)
Compare:它用于确保模型对象的两个属性拥有相同的值。(ASP.NET MVC下特有)
2.注解的后台原理
ASP.NET MVC 的验证特性是由模型绑定器、模型元数据、模型验证器和模型状态组成的协调系统的一部分。
默认情况下,ASP.NET MVC 框架在模型绑定时执行验证逻辑(隐式执行)。当然,也可以利用控制器的UpdateModel或TryUpdateModel方法显式执行模型绑定。
模型绑定器一旦使用新值完成对模型属性的更新,就会利用当前的模型元数据获得模型的所有验证器。ASP.NET MVC 运行时提供了一个验证器(DataAnnotationModelValidator)来与数据注解一同工作。这个模型验证器会找到所有的验证特性并执行它们的包含的验证逻辑。模型绑定器捕获所有失败的验证规则并把它们放在模型状态中(ModelState)。
3.自定义注解验证
所有的验证注解特性最终都派生自基类ValidationAttribute,它是个抽象类,在名称控件System.ComponentModel.DataAnnotations中定义。
4.自定义模型验证
自验证模型是指一个知道如何验证自身的模型对象。一个模型对象可以通过实现IValidatableOject接口来实现对自身的验证。
5.显式和编辑注解
Display特性可为模型属性设置友好的"显式名称"。此外Display的order属性可以对UI上面的显式字段进行排序。Order参数的默认指是10000。
ScaffoldColum特性可以隐藏HTML辅助方法渲染的一些属性。
DisplayFormat特性可用来处理属性的各种格式化选项。当属性包含空值时,可以提供可选的显示文本,也可以为包含标记的属性关闭HTML编码,还可以为运行时指定一个应用于属性值的格式化字符串。