快速业务通道

《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》之继续扩展

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
这样:

1: public static IEnumerable<ErrorInfo> GetErrors(this object  instance)
2: {
3:   //或返回一个只包含一个ErrorInfo对象的集合
4:   if  (instance == null) return null;
5:
6:   //尝试获取类型的伙伴类型
7:   var  metadataAttrib = instance.GetType().GetCustomAttributes(typeof(MetadataTypeAttribute),  true).OfType<MetadataTypeAttribute>().FirstOrDefault();
8:   //获取具有校验数据 的类型(伙伴类型或本类型)
9:   var buddyClassOrModelClass = metadataAttrib != null  ? metadataAttrib.MetadataClassType : instance.GetType();
10:   //伙伴类型的属性
11:   var buddyClassProperties = TypeDescriptor.GetProperties (buddyClassOrModelClass).Cast<PropertyDescriptor>();
12:   //实际模型的属性
13:   var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType ()).Cast<PropertyDescriptor>();
14:
15:   //获取伙伴类型或本类型的校验特性
16:   var buddyClassAttrib = TypeDescriptor.GetAttributes (buddyClassOrModelClass).OfType<ValidationAttribute>();
17:   var  modelClassAttrib = TypeDescriptor.GetAttributes(instance.GetType ()).OfType<ValidationAttribute>();
18:
19:   var errors = (
20:            from buddyProp in buddyClassProperties
21:           join  modelProp in modelClassProperties on buddyProp.Name equals modelProp.Name
22:            from attribute in buddyProp.Attributes.OfType<ValidationAttribute> ()
23:           where !attribute.IsValid(modelProp.GetValue(instance))
24:           select new ErrorInfo(buddyProp.Name,  attribute.FormatErrorMessage(string.Empty), instance)
25:          ).Union (
26:            from attribute in buddyClassAttrib
27:             where !attribute.IsValid(instance)
28:            select new  ErrorInfo(string.Empty, attribute.FormatErrorMessage(string.Empty), instance)
29:           ).Union(
30:            from attribute in  modelClassAttrib
31:            where !attribute.IsValid(instance)
32:             select new ErrorInfo(string.Empty, attribute.FormatErrorMessage (string.Empty), instance)
33:          );
34:
35:   return  errors;
36: }
37:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号