Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用
上篇文章Asp.net MVC验证那些事(1)-- 介绍和验证规则使用中,介绍了Asp.net MVC中的验证功能以及如何使用。这里将对MVC中内置的验证规则进行总结。
一,查找所有验证规则
上篇文章中提到,所有的验证规则都是位于下面的命名空间下:
using System.ComponentModel.DataAnnotations;
我们可以用ILSpy反编译工具,看看这个命名空间下都有些什么. 下面的图让我们一目了然,在这个命名空间下,.net为我们提供了那些验证规则。
不过,有三点需要注意:
1. 列出的类基本都是Attribute,如果不理解Attribute,可以看这里.Net Attribute详解(上)-Attribute本质以及一个简单示例
2. 正如Annotation的意识是“注释”, 这个命名空间下的类的本质是为数据类型添加注释和解释。验证规则也是一种注释,是对于数据规范要求的注释。
所以下面的所有类并不全是验证规则, 比如DisplayAttribute使用与显示,KeyAttribute常常用于定义主键, 以后有机会再和大家分享.
3. 之所以这些类不在System.Web命名空间下,是因为这些验证规则是不单单用于MVC项目中的,实际上它们可以用于任何地方,MVC验证只是其中一处。

二,使用验证Attribute的Model
本文中,涉及的验证规则,都应用到下面的Employee Model上, 对照下面的验证规则的解释,就能非常容易明白每项验证功能的作用了。
public class Employee
{
public int EmpId { get; set; }
[DisplayName("Employee Name")]
[Required(ErrorMessage = "Employee Name is required")]
[StringLength(, MinimumLength = )]
public String EmpName { get; set; } [DisplayName("Password")]
[DataType(DataType.Password)]
[Required]
public string Password { get; set; } [CompareAttribute("Password")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; } [Required(ErrorMessage = "Employee Address is required")]
[StringLength()]
public string Address { get; set; } [Required(ErrorMessage = "Salary is required")]
[Range(, , ErrorMessage = "Salary must be between 3000 and 10000000")]
public int Salary { get; set; } [DisplayName("Credit Card")]
[CreditCard(ErrorMessage = "Please enter correct credit card number.")]
public string CreditCardNumber { get; set; } [Required(ErrorMessage = "Please enter your email address")]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
[MaxLength()]
[EmailAddress(ErrorMessage = "Please enter correct email")]
public string Email { get; set; }
}
三,具体验证规则
下面就来一一介绍我们可以用于MVC项目中的验证规则:
1. RequiredAttribute
必填项检查,应用上该特性的字段,必须输入值。

2. CompareAttribute
CompareAttribute用于比较2个属性是否相同. 注册用户的时候,常常需要输入2次密码,其中一个是确认的密码,要求2个密码框中的密码必须相同,这个时候就可以应用CompareAttribute

3. RangeAttribute
用来限定数据范围,比如Age年龄字段,你可以限制数据必须在0~150之间。

4. StringLengthAttribute,MaxLengthAttribute和MinLengthAttribute
这3个都是用来对于字符串属性长度进行验证的。StringLength用来限定具体的长度,而后面的,一个是最大可输入长度,一个是最小的输入长度, 注意MaxLength和MinLength可以用于String和Array。

5. CreditCardAttribute验证
这个是用来验证信用卡的,支持多种类型信用卡的验证。

6. EmailAddressAttribute和UrlAttribute
这个非常简单,就是用来验证Email格式和Url格式的
7. FileExtensionsAttribute
用来检查文件名称后缀。假如你禁止上传.exe文件到服务器,这个时候,就可以通过它来做限制。
8. RegularExpressionAttribute
最后,如果上面的这些都无法符合你的要求,可以试试这个RegularExpressionAttribute. 它可以指定一个正则表达式作为验证规则。
Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用的更多相关文章
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
- 【记录】ASP.NET MVC 4/5 Authentication 身份验证无效
在 ASP.NET MVC 4/5 应用程序发布的时候,遇到一个问题,在本应用程序中进行身份验证是可以,但不能和其他"二级域名"共享,在其他应用程序身份验证,不能和本应用程序共享, ...
- ASP.NET MVC Jquery Validate 表单验证的多种方式
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- ASP.NET MVC系列:添加模型的验证规则
首先,在模型类中引用 System.ComponentModel.DataAnnotations 命名空间;System.ComponentModel.DataAnnotations 命名空间提供定义 ...
- [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- 在ASP.NET MVC中对手机号码的验证
在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码. public class Customer { [Required(ErrorMessage = " ...
- ASP.NET MVC+Bootstrap 实现短信验证
短信验证大家都已经非常熟悉了,基本上每天都在接触手机短信的验证码,比方某宝,某东购物.站点注冊,网上银行等等,都要验证我们的手机号码真实性.这样做有什么优点呢. 曾经咱们在做站点的时候.为了提高用户注 ...
随机推荐
- NoSQL数据库介绍
NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...
- springmvc restful配置有一个小小的坑坑
首先web.xml配置 <!-- spring-mvc --> <servlet> <servlet-name>springServlet</servlet- ...
- 对Java并发编程的几点思考
1. Threads 和 Runnables 所有的现代操作系统都通过进程和线程来支持并发.进程是通常彼此独立运行的程序的实例,比如,如果你启动了一个Java程序,操作系统产生一个新的进程,与其他程序 ...
- 指针,&的用法
#include "stdafx.h" #include <stdio.h> #include <string.h> int main() { ] = {, ...
- MAC使用CocoaPods
前言,還是那句話,按照濤叔下面畫黃色的步驟順序執行就好了 使用CocoaPods兩種方式:使用之前安裝的插件&命令行. 一.利用插件 1.創建項目后添加CocoaPods 2.在文本框中輸入如 ...
- 十大Intellij IDEA快捷键
转载:http://blog.csdn.net/dc_726/article/details/42784275 Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一 ...
- 理解 OpenStack 高可用(HA) (4): Pacemaker 和 OpenStack Resource Agent (RA)
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- [asp.net mvc 奇淫巧技] 01 - 封装上下文 - 在View中获取自定义的上下文
我们在asp.net 开发中已经封装了最强大的HttpContext,我们可以在HttpContext中可以获取到几乎任何想获取的东西,也可以在HttpContext写入需要返回客户端的信息.但是这些 ...
- (转)B-树、B+树、B*树
B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子:且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: 4. ...
- knowing abstract,virtual,override,new
If a class has at least one member which modified by "abstract",this class is an abstract ...