MVC之参数验证(一)
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其数据的准确性。总地来说,我们可以采用System.ComponentModel.DataAnnotations命名空间下的提供的属性进行手动或自定义验证信息。
1、传统验证方式
回想一下当初的WebForm进行参数信息验证时,一般是在BLL层中进行数据验证,但是BLL层的返回值又只能返回一个东西,比如一个字符串,而实际情况中,数据验证是很复杂的,这时候BLL层和网站会分离的不彻底,因为很多业务代码不得不在网站中写,这样系统的维护代价太高,并且冗余量也繁重。如果我们要针对模型中的对Name条件添加限制 不能为空且长度不能超过10个字符的写法如下:
2、参数绑定验证
自从MVC框架诞生后同样的业务编写起来就非常方便了,让我们的业务也变的简单多了。使用MVC框架System.ComponentModel.DataAnnotations命名空间下的提供的属性可以解决我们一部分验证要求,写法如下:
3、自定义验证(一)
虽然系统中提供的属性已经很强大了但也无法满足我们日常业务的多样性,那么针对这样变化万千的验证规则我们只能采用自定义模型在解决这种问题,在传统模式的开发中 我们一般都是将参数的验证逻辑和业务逻辑定义在Action方法中这并非一种值得推荐的编程方式,这样的编程方式耦合度太高并且不利用代码的重用。如果我们能将验证逻辑与业务逻辑分离开来,将验证规则与数据关联在一起,那么开发人员就可以着重于程式业务逻辑上,实际上MVC框架支持这种编辑,在System.ComponentModel.DataAnnotations命令空间下定义了一系列具体的ValidationAttribute特性类型的属性,我们只要重写ValidationAttribute类下的IsValid就可以自定义符合自己的一套验证规则的属性。如下:
这个案例定义一个 只有存在AllObject这个集合下的字符串才是符合条件的Value。看看此属性如何使用:
4、自定义验证(二)
使用ValidationAttribute特性直接定义在数据类型上,让ASP.NET MVC在进行模型绑定过程中来验证参数之外,我们还可以将验证操作直接定义在数据类型中,使用IValidatableObject接口在数据类型中进行参数验证 操作如下: