自定义验证规则ValidationAttribute的使用
概述
大家在做项目的时候,在实体类上添加一些特性,可以实现后端实体的数据校验。有时候,可能需要自定义验证属性。实现原理:利用反射获取实体的每一个属性,并通过属性获取属性上标注的特性,调用特性的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的使用相关推荐
- 后盾网lavarel视频项目---自定义验证和自定义验证规则
后盾网lavarel视频项目---自定义验证和自定义验证规则 一.总结 一句话总结: 1.自定义验证就是用的自定义验证请求类:php artisan make:request AdminPost 2. ...
- yii2中的rules 自定义验证规则详解
yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...
- easyui的validatebox重写自定义验证规则的几个实例
validatebox已经实现的几个规则: 验证规则是根据使用需求和验证类型属性来定义的,这些规则已经实现(easyui API): email:匹配E-Mail的正则表达式规则. url:匹配URL ...
- validatebox自定义验证规则以及使用
//===============jsp======state====//开启验证<script type="text/javascript"> yZ() ...
- 教你三种Model(AR)中自定义验证规则的方法
2019独角兽企业重金招聘Python工程师标准>>> 各位Yii2兄弟都知道Model的rules里面可以使用自己定义的验证规则,我们今天就把自定义规则做一个总结,进行一次彻底的知 ...
- php验证法则是10位数字,自定义验证规则
> ## 设置验证规则 ``` // 1.数组传入(针对在控制器中定义验证) $rules = [ 'name' => 'require|max:25', 'age' => 'num ...
- layui单选框verify_layui lay-verify form表单自定义验证规则详解
虽然layui的官方文档已经是写的比较详细,但是初次使用的时候总会懵一下,这里纪录一下lay-verify自定义验证规则的时候到底放哪. html: 提交 js: form.verify({ //数组 ...
- layui的表单——自定义验证规则
最近layui的表单用的比较多,所以整理来一下自定义的验证如下(下面是自己写的例子): layui的官网 引入layui之后 html <form action="" cla ...
- Gin验证请求参数-自定义验证规则
Gin对请求参数自定义验证规则可以分三步: 自定义结构体验证绑定binding标签 针对该标签定义验证方法 再将该验证方法注册到validator验证器里面 自定义结构体验证绑定binding标签 需 ...
最新文章
- Android APP层 ShellUtils
- 无悔入华夏怎么一直显示服务器,无悔入华夏新手开局玩法 无悔入华夏新手攻略开局带的...
- csv linux java,java 执行Linux 命令合并.csv文件
- Python自然语言处理相,新词发现,主题模型,隐马尔模型词性标注,Word2Vec,情感分析...
- oracle 函数 结果集,Oracle 中函数如何返回结果集
- 达梦系统录音服务器是哪个,达梦服务器安装及使用教程
- SpringApplication.run方法分析
- 标签模型:用户性别标签
- 卸载应用后,删除安装根目录下的所有文件,提示已在另一进程打开,在资源管理器进程中找不到该程序的解决
- 制售《原神》外挂非法获利200万,外挂的危害有多大?
- Docker搭建MySQL的PXC集群
- C语言之对char*与char[]的理解
- 【嵌入式Linux驱动入门】二、上手Hello驱动,了解驱动开发流程
- APICloud AVM框架 开发视频会议APP
- C# 屏蔽Ctrl Alt Del 快捷键方法+屏蔽所有输入
- c语言(15 5)是多少,试题五(共 15分) 阅读以下关于 C语言及 C代码的叙述,回答问题 1至..._考试资料网...
- OLED显示技术的发展趋势浅析
- 企业虚拟主机怎么选择
- 基于JSP技术的学生网上选课系统的设计与实现
- #define 用法解析
热门文章
- 程序异常异常代码: 0xc0000005_Java基础:看完这篇你还怕碰到异常吗?
- html5/css3响应式布局介绍
- 语法上的小trick
- 18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
- windows 下 MyEclipse 逆向工程生成hiberate 对应配置文件以及 javaBean。
- MVC学习九:MVC 特性本质
- 在 App 扩展和主 App 间共享数据
- 【IBatisNet Spring.Net】ORM与IOC 简单配置
- 浏览器显示无法解析服务器的DNS地址,使用搜狗浏览器时突然弹出无法解析服务器的DNS地址该如何处理...
- 程序改变了命运,程序生活一天比一天好,对未来也充满了希望