欢迎来到天天文库
浏览记录
ID:41582439
大小:55.88 KB
页数:3页
时间:2019-08-28
《asp网站开发实用教程教学资料课外阅读3》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、工学结合创新教程ASP网站开发实用教程二、使用ValidationAttribute特性将针对输入参数的验证逻辑和业务逻辑定义在Action方法中并不是一种值得推荐的编程方式。在大部分情况下,同一个数据类型在不同的应用场景屮具有相同的验证规则,如果我们能将验证规则与数据类型关联在一起,让框架本身来实施数据验证,那么最终的开发者就可以将关注点更多地放在业务逻辑的实现上面。实际上这也是ASP.NETMVC的Model验证系统默认支持的编程方式。当我们在定义数据类型的时候,可以在类型及其数据成员上面应用相应的ValidationAttribute特性来定义默认采
2、用的验证规则。“Systcm.ComponemModel.DataAnno⑹ions”命名空间定义了一系歹U具体的ValidationAttribute特性类型,它们大都可以直接应用在自定义数据类型的某个属性上对目标数据成员实施验证。这些预定义验证特性不是本章论述的重点,我们会在“下篇”中对它们作一个概括性的介绍。常规验证可以通过上面列出的这些预定义ValidationAttribute特性来完成,但是在很多情况下我们需要通过创建自定义的ValidationAttribute特性来解决一些特殊的验证。比如上面演示实例屮针对Person对象的验证屮,我们要求
3、Gender属性指定的表示性別的值必须是“M/m”和“F/f俩者之一,这样的验证就不得不通过自定义的ValidationAttribute特性來实现。针对“某个值必须在指定的范围内''这样的验证规则,我们定义一个DomainAttribute性。如下面的代码片断所示,DomainAttribute具有一个IEnumerable类型的只读屈性Values提供了一个有效值列表,该列表在构造函数中被初始化。具体的验证实现在重写的IsValid方法屮,如果被验证的值在这个列表屮,则视为验证成功并返回True。为了提供一个友好的错误消息,我们重写了方
4、法FormatErrorMessage□[AttributeUsage(AttributeTargets.Property
5、AttributeTargets.Field,AllowMultiple=false)]publicclassDomainAttribute:ValidationAttribute{publicIEnumerableValues{get;privateset;}publicDomainAttribute(stringvalue){this.Values=newstring[]{value};}publicDomainA
6、ttribute(paramsstringf]values){this.Values=values;}publicoverrideboolIsValid(objectvalue)if(null==value)returntrue;}returnthis.Vaiues.Any(item=>value.ToString()==item);1publicoverridestringFormatErrorMessage(stringname)参考案例this.Values-Select(value=>string.Format(lu{0}项目1项目2string[
7、]valuesvalue)).ToArray();returnstring.Format(base.ErrorMessageString,name^tringJoinC','1,values));项目3}项目4由于ASP.NETMVC在进行参数绑定的时候会自动提取应用在目标参数类型或者数据成■■员上的ValidationAttribute特性,并利用它们对提供的数据实施验证,所以我们不再需要像上面演示的实例一样自行在Action方法中实施验证,而只需要在定义参数类型Person的时候应用相应的ValidationAttribute特性将采用的验证规则与对应
8、的数据成员相关联。如下所示的是属性成员上应用了相关ValidationAttribute特性的Person类型的定义。我们在三个属性上均应用了RequiredAttribute特性将它们定义成必需的数据成员,Gender和Age属性上则分别应用了DomainAttribute和RangeAttribute特性对冇效属性值的范围作了相应限制。publicclassPerson项H4项目6[DisplayNameC1姓名J][Required(ErrorMessageResourceName=HRequiredH,ErrorMessageResourceTyp
9、e=typeof(Resources))]publicstring
此文档下载收益归作者所有