ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其数据的准确性。总地来说,我们可以采用System.ComponentModel.DataAnnotations命名空间下的提供的属性进行手动或自定义验证信息。

1、传统验证方式

  回想一下当初的WebForm进行参数信息验证时,一般是在BLL层中进行数据验证,但是BLL层的返回值又只能返回一个东西,比如一个字符串,而实际情况中,数据验证是很复杂的,这时候BLL层和网站会分离的不彻底,因为很多业务代码不得不在网站中写,这样系统的维护代价太高,并且冗余量也繁重。如果我们要针对模型中的对Name条件添加限制 不能为空且长度不能超过10个字符的写法如下:

2、参数绑定验证

  自从MVC框架诞生后同样的业务编写起来就非常方便了,让我们的业务也变的简单多了。使用MVC框架System.ComponentModel.DataAnnotations命名空间下的提供的属性可以解决我们一部分验证要求,写法如下:

3、自定义验证(一)

  虽然系统中提供的属性已经很强大了但也无法满足我们日常业务的多样性,那么针对这样变化万千的验证规则我们只能采用自定义模型在解决这种问题,在传统模式的开发中 我们一般都是将参数的验证逻辑和业务逻辑定义在Action方法中这并非一种值得推荐的编程方式,这样的编程方式耦合度太高并且不利用代码的重用。如果我们能将验证逻辑与业务逻辑分离开来,将验证规则与数据关联在一起,那么开发人员就可以着重于程式业务逻辑上,实际上MVC框架支持这种编辑,在System.ComponentModel.DataAnnotations命令空间下定义了一系列具体的ValidationAttribute特性类型的属性,我们只要重写ValidationAttribute类下的IsValid就可以自定义符合自己的一套验证规则的属性。如下:

这个案例定义一个 只有存在AllObject这个集合下的字符串才是符合条件的Value。看看此属性如何使用:

4、自定义验证(二)

  使用ValidationAttribute特性直接定义在数据类型上,让ASP.NET MVC在进行模型绑定过程中来验证参数之外,我们还可以将验证操作直接定义在数据类型中,使用IValidatableObject接口在数据类型中进行参数验证 操作如下:

MVC之参数验证(一)的更多相关文章

  1. MVC之参数验证(三)

    在实际开发中,项目经理会一直强调一句话,永远不要相信客户端的数据(前端可以不用验证,但是后端必须验证).大家同意这样的说法吧..新端验证毋庸质疑JS验证,提高用户体验我们不得不添加一些与后端一致的验证 ...

  2. MVC之参数验证(二)

    MVC内部针对这此验证是如何实现的咧???现在我们就来分析一下这此验证的背后故事.... 1.ModelValidator与ModelValidatorProvider 虽然Model绑定方式的因绑定 ...

  3. JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用很多时候同样的数据验证逻辑会出现在不同的层,这样 ...

  4. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  5. MVC 3 数据验证 Model Validation 详解

    在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的 ...

  6. (转)MVC 3 数据验证 Model Validation 详解

    继续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3 ...

  7. MVC WebApi 用户验证 (2)

    构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2)   前言: 构建ASP.NET MVC5+EF6+E ...

  8. <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

    MVC 3 数据验证 Model Validation 详解  再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...

  9. C# 中参数验证方式

    C# 中参数验证方式 一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空, ...

随机推荐

  1. SpringBoot使用logback自定义配置时遇到的坑 --- 在 /tmp目录下自动生成spring.log文件

    问题描述 SpringBoot项目使用logback自定义配置后,会在/tmp/ 目录下生成 spring.log的文件(如下图所示). 解决方案 通过各种资料的搜索,最终发现问题的所在(logbac ...

  2. java List.add操作可以指定位置

    java List.add操作可以指定位置,addAll也可以指定: 使用: public class Test02 { public static void main(String[] args) ...

  3. Centos7下安装.bin格式

    1.检查系统是否已经存在jdk版本,#java –version.javac –version 2.赋予.bin的jdk安装包的执行权限chmod u+x jdk-6u25-linux-x64.bin ...

  4. Tcl脚本调用高层API实现仪表使用和主机创建配置的自己主动化測试用例

    #设置Chassis的基本參数,包含IP地址.port的数量等等 set chassisAddr 10.132.238.190 set islot 1 set portList {11 12} ;#端 ...

  5. April Fools Day Contest 2014 H. A + B Strikes Back

    H. A + B Strikes Back time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. js 返回顶部

    <script> window.onload = function(){ var oTop = document.getElementById("to_top"); v ...

  7. Mac SavePanel 保存文件的GUI代码

    // Move the recorded temporary file to a user-specified location (视频文件另存储过程,依据用户选择的路径和文件保存名) NSSaveP ...

  8. swift 笔记 (二十一) —— 高级运算符

    高级运算符 位运算符 按位取反: ~ 按位与运算:  & 按位或运算:  | 按位异或运算:  ^ 按位左移运算: << 按位右移动算: >> 溢出运算符 自从swif ...

  9. cocos2dx游戏开发学习笔记2-从helloworld開始

    一.新建project 具体安装和新建project的方法在cocos2dx文件夹下的README.md文件里已经有具体说明,这里仅仅做简介. 1.上官网下载cocos2dx-3.0的源代码.http ...

  10. linux redis tmp redis 安装

    Redis https://redis.io/download yum install make gcc gcc-c++ openssl-devel zlib-devel -y; wget tar - ...