概述

大家在做项目的时候,在实体类上添加一些特性,可以实现后端实体的数据校验。有时候,可能需要自定义验证属性。实现原理:利用反射获取实体的每一个属性,并通过属性获取属性上标注的特性,调用特性的Validate方法(此方法自定义的)来验证属性的值是否合法。

代码实现

1、自定义CustomizedStringLength,继承StringLengthAttribute

 public class CustomizedStringLength : StringLengthAttribute{private Type resourceType;private string resourceName;public CustomizedStringLength(int MaximumLength, Type ResourceType, string ResourceName) : base(MaximumLength){resourceType = ResourceType;resourceName = ResourceName;}public CustomizedStringLength(int MaximumLength) : base(MaximumLength){}public override string FormatErrorMessage(string name){string fieldName = resourceType.GetProperty(resourceName).GetValue(resourceType).ToString();if (MinimumLength != 0){this.ErrorMessage = string.Format(PageValidation.LimitLength, fieldName, MaximumLength, MinimumLength);}else{this.ErrorMessage = string.Format(PageValidation.StringMaxLengthTemplate, fieldName, MaximumLength);}return base.FormatErrorMessage(name);}}
}

2、Application_Start全局注册

  //在 Controller 之前對 Model 做處理(字串 Trim)ModelBinders.Binders.DefaultBinder = new BQoolModelBinder();//註冊自訂的 Validation (複寫預設的錯誤訊息)CustomerValidation.RegisterCustomerValidation();DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomizedRequired), typeof(RequiredAttributeAdapter));DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomizedStringLength), typeof(StringLengthAttributeAdapter));

3、在字段调用CustomizedStringLength

    [CustomizedRequired(ResourceType: typeof(AccountSettingsElement), ResourceName: "AccountEmail")][CustomizedStringLength(100, ResourceType: typeof(AccountSettingsElement), ResourceName: "AccountEmail")][CustomizedRegularExpression(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$", ResourceType: typeof(AccountSettingsElement), ResourceName: "AccountEmail")][Display(ResourceType = typeof(AccountSettingsElement), Name = "AccountEmail")]public string AccountEmail { get; set; }

4、控制器上验证ModelState.IsValid

  if (!ModelState.IsValid){Response.Redirect(Request.Url.AbsolutePath);Response.End();return;}

当我们通过继承ValidationAttribute创建我们自己的验证特性的时候,可以通过重写公有方法IsValid或者受保护方法IsValid来实现我们自定义的验证逻辑。我们之所以能够通过重写任一个IsValid方法是我们自定义验证逻辑生效的原因在于这两个方法在ValidationAttribute特殊的定义方法。

自定义验证规则ValidationAttribute的使用相关推荐

  1. 后盾网lavarel视频项目---自定义验证和自定义验证规则

    后盾网lavarel视频项目---自定义验证和自定义验证规则 一.总结 一句话总结: 1.自定义验证就是用的自定义验证请求类:php artisan make:request AdminPost 2. ...

  2. yii2中的rules 自定义验证规则详解

    yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...

  3. easyui的validatebox重写自定义验证规则的几个实例

    validatebox已经实现的几个规则: 验证规则是根据使用需求和验证类型属性来定义的,这些规则已经实现(easyui API): email:匹配E-Mail的正则表达式规则. url:匹配URL ...

  4. validatebox自定义验证规则以及使用

    //===============jsp======state====//开启验证<script type="text/javascript"> ​​​​​​​yZ() ...

  5. 教你三种Model(AR)中自定义验证规则的方法

    2019独角兽企业重金招聘Python工程师标准>>> 各位Yii2兄弟都知道Model的rules里面可以使用自己定义的验证规则,我们今天就把自定义规则做一个总结,进行一次彻底的知 ...

  6. php验证法则是10位数字,自定义验证规则

    > ## 设置验证规则 ``` // 1.数组传入(针对在控制器中定义验证) $rules = [ 'name' => 'require|max:25', 'age' => 'num ...

  7. layui单选框verify_layui lay-verify form表单自定义验证规则详解

    虽然layui的官方文档已经是写的比较详细,但是初次使用的时候总会懵一下,这里纪录一下lay-verify自定义验证规则的时候到底放哪. html: 提交 js: form.verify({ //数组 ...

  8. layui的表单——自定义验证规则

    最近layui的表单用的比较多,所以整理来一下自定义的验证如下(下面是自己写的例子): layui的官网 引入layui之后 html <form action="" cla ...

  9. Gin验证请求参数-自定义验证规则

    Gin对请求参数自定义验证规则可以分三步: 自定义结构体验证绑定binding标签 针对该标签定义验证方法 再将该验证方法注册到validator验证器里面 自定义结构体验证绑定binding标签 需 ...

最新文章

  1. Android APP层 ShellUtils
  2. 无悔入华夏怎么一直显示服务器,无悔入华夏新手开局玩法 无悔入华夏新手攻略开局带的...
  3. csv linux java,java 执行Linux 命令合并.csv文件
  4. Python自然语言处理相,新词发现,主题模型,隐马尔模型词性标注,Word2Vec,情感分析...
  5. oracle 函数 结果集,Oracle 中函数如何返回结果集
  6. 达梦系统录音服务器是哪个,达梦服务器安装及使用教程
  7. SpringApplication.run方法分析
  8. 标签模型:用户性别标签
  9. 卸载应用后,删除安装根目录下的所有文件,提示已在另一进程打开,在资源管理器进程中找不到该程序的解决
  10. 制售《原神》外挂非法获利200万,外挂的危害有多大?
  11. Docker搭建MySQL的PXC集群
  12. C语言之对char*与char[]的理解
  13. 【嵌入式Linux驱动入门】二、上手Hello驱动,了解驱动开发流程
  14. APICloud AVM框架 开发视频会议APP
  15. C# 屏蔽Ctrl Alt Del 快捷键方法+屏蔽所有输入
  16. c语言(15 5)是多少,试题五(共 15分) 阅读以下关于 C语言及 C代码的叙述,回答问题 1至..._考试资料网...
  17. OLED显示技术的发展趋势浅析
  18. 企业虚拟主机怎么选择
  19. 基于JSP技术的学生网上选课系统的设计与实现
  20. #define 用法解析

热门文章

  1. 程序异常异常代码: 0xc0000005_Java基础:看完这篇你还怕碰到异常吗?
  2. html5/css3响应式布局介绍
  3. 语法上的小trick
  4. 18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
  5. windows 下 MyEclipse 逆向工程生成hiberate 对应配置文件以及 javaBean。
  6. MVC学习九:MVC 特性本质
  7. 在 App 扩展和主 App 间共享数据
  8. 【IBatisNet Spring.Net】ORM与IOC 简单配置
  9. 浏览器显示无法解析服务器的DNS地址,使用搜狗浏览器时突然弹出无法解析服务器的DNS地址该如何处理...
  10. 程序改变了命运,程序生活一天比一天好,对未来也充满了希望