上篇文章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)-- 验证规则总结以及使用的更多相关文章

  1. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  2. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

  3. ASP.NET MVC下的四种验证编程方式[续篇]【转】

    在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...

  4. ASP.NET MVC下的四种验证编程方式【转】

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...

  5. 【记录】ASP.NET MVC 4/5 Authentication 身份验证无效

    在 ASP.NET MVC 4/5 应用程序发布的时候,遇到一个问题,在本应用程序中进行身份验证是可以,但不能和其他"二级域名"共享,在其他应用程序身份验证,不能和本应用程序共享, ...

  6. ASP.NET MVC Jquery Validate 表单验证的多种方式

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  7. ASP.NET MVC系列:添加模型的验证规则

    首先,在模型类中引用 System.ComponentModel.DataAnnotations 命名空间;System.ComponentModel.DataAnnotations 命名空间提供定义 ...

  8. [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  9. 在ASP.NET MVC中对手机号码的验证

    在ASP.NET MVC中,可以使用RegularExpression特性来验证手机号码. public class Customer { [Required(ErrorMessage = " ...

  10. ASP.NET MVC+Bootstrap 实现短信验证

    短信验证大家都已经非常熟悉了,基本上每天都在接触手机短信的验证码,比方某宝,某东购物.站点注冊,网上银行等等,都要验证我们的手机号码真实性.这样做有什么优点呢. 曾经咱们在做站点的时候.为了提高用户注 ...

随机推荐

  1. 深入Java事务的原理与应用

    一.什么是JAVA事务    通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 ( ...

  2. 炉石传说 C# 开发笔记(BS模式Demo)

    原来这个项目,一直想做成CS模式的,BS模式对于炉石这样的游戏来说比较困难. 暴雪到现在也只出了 Windows 和 iPad版本的炉石,最大的问题还是在于如何在小屏幕下,实现最佳的客户体验. Win ...

  3. node.js 抓取网页数据

    var $ = require('jquery'); var request = require('request'); request({ url: 'http:\\www.baidu.com',/ ...

  4. Java--concurrent并发包下阻塞队列介绍

    JDK提供了7中阻塞队列,这里介绍其中3中,剩余的以此类推原理相同. 1.ArrayBlockingQueue package com.seeyon.queue; import java.util.c ...

  5. Jquery UI 和Easy UI常用插件

    一.Jquery的插件简介 (一)什么是插件 插件(Plug-in)是一种遵循一定的应用程序接口规范编写出来的程序,是原有系统平台或应用软件平台功能的一种扩展和补充. 注意!!其只能在程序规定的系统平 ...

  6. WinForm 窗体应用程序(初步)之一

    学习制作一个WinForm程序,有两样东西是需要首先掌握的.第一部分,我们称之为属性面板.无论是窗体还是控件,都有着自己的属性面板.第二部分,则是我们称之为控件的东西. 我们先来讨论一下属性面板.新建 ...

  7. win server 2008 r2 sharepoint 域环境安装经历

    环境: 物理机:win7(x64,计算机名字:wyman-pc,ip:192.168.10.102)  / sql server 2008 r2(x64) /VM10 虚拟机:win svr 2008 ...

  8. Community Value再理解

    其实之前写“从香港机房引入google/bitbucket路由”的时候,对community value的了解还并不深入,对Juniper default BGP export/import poli ...

  9. C#如何用delegate实现Javascript的each方法

    C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate.Func, Action和 Predicate本质上都是delegate,下面看一下delegate概 ...

  10. jQuery动态提示消息框效果

    效果预览:http://keleyi.com/keleyi/phtml/jqtexiao/2.htm 原文:http://keleyi.com/a/bjac/hxv86dyi.htm <!DOC ...