asp.net mvc的验证包含后台验证和前端验证。后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中。前端验证是通过结合jquery.validate.js插件实现的,后台将验证的元数据,包括错误提示消息、验证参数等,以属性的形式添加到前端input标签中,微软封装的jquery.validate.unobtrusive.js可获取这些元数据并结合jquery.validate作前端验证。本文主要对后台验证作相关介绍。

asp.net mvc框架封装了很多数据注解特性,它们都是在System.ComponentModel.DataAnnotations名称空间下,且继承了ValidationAttribute类。

  • Required:字段必须
  • StringLength:字段字符串长度
  • RangularExpression:字段正则表达式匹配验证
  • Range:指定数值的最小值和最大值
  • Compare:确保模型对象的两个属性有相同的值,其参数为另一个与其要值相同的字段名(只需标注在其中一个属性即可)
  • Remote:可利用服务器端的回调函数执行客户端的验证逻辑,由于执行的是客户端ajax验证,页面需引用jquery.validate.js插件和jquery.validate.unobtrusive.js。

asp.net mvc框架还允许自定义数据注解特性,但需继承ValidationAttribute基类,且重写其提供的一个IsValid方法版本,如下所示:

一般建议实现带ValidationContext参数的IsValid方法,该参数带了很多与模型相关的信息,如:模型类型、模型对象实例、属性的显示名称等。该方法返回ValidationResult对象,使用时,若验证成功,则返回ValidationResult.Success,验证失败可对该类的构造函数传一个验证错误的字符串。此外,通过实现FormatErrorMessage方法还可以定义默认的验证错误信息。

以上数据注解的验证方式可应用在不同类的不同属性中,但需要定义一个单独的数据注解特性类。asp.net mvc框架还提供了另一种模型验证方式:自验证。这种方式是针对的某一个模型进行验证,因此其验证方法可写在一个需要验证的模型当中。具体操作时,让需要进行模型验证的模型继承IValidatableObject接口,并实现接口中的Validate验证方法即可。

模型的验证是发生模型的绑定过程中,通过当前controller的ModelState属性可获知模型验证是否通过(ModelState.IsValid),且也可从ModelState中获取验证错误的信息,且通过一些额外方法获取的验证错误信息也可以通过ModelState属性的AddModelError(string key, string errorMessage)方法添加到该模型的ModelState中。

asp.net mvc中的后台验证的更多相关文章

  1. ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)

    在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...

  2. asp.net mvc 中的自定义验证(Custom Validation Attribute)

    前言

  3. 再议ASP.NET MVC中CheckBoxList的验证

    在ASP.NET MVC 4中谈到CheckBoxList,经常是与CheckBoxList的显示以及验证有关.我在"MVC扩展生成CheckBoxList并水平排列"中通过扩展H ...

  4. ASP.NET MVC中使用FluentValidation验证实体

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

  5. ASP.NET MVC中使用FluentValidation验证实体(转载)

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

  6. ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式

    方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start ...

  7. asp.net MVC 中 Session统一验证的方法

    验证登录状态的方法有:1  进程外Session   2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseContro ...

  8. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...

  9. ASP.NET MVC中商品模块小样

    在前面的几篇文章中,已经在控制台和界面实现了属性值的笛卡尔乘积,这是商品模块中的一个难点.本篇就来实现在ASP.NET MVC4下商品模块的一个小样.与本篇相关的文章包括: 1.ASP.NET MVC ...

随机推荐

  1. spring boot 集成 thymeleaf

    例如meta标签,低版本标签必须要闭合,高版本不用这么严格. pom文件引入高版本jar包如下,propertis里添加:

  2. iOS之Settings.Bundle的应用

    Settings.Bundle Settings.Bundle支持六种配置项分别是:Title,MultiValue,Group,Slider,ToggleSwitch,TextField . Tit ...

  3. hashmap可以用null为键值

    import java.util.HashMap; import java.util.Map; import java.util.TreeMap;   public class TestMain { ...

  4. ABP实践(3)-ASP.NET Core 2.x版本(从创建实体到输出api)简单实现商品列表及增删改

    项目基于前两篇文章. 本章创建一个简单版的商品管理后台api,用到EF Core用code fist迁移数据创建数据库. 创建Goods实体 在领域层xxx.Core项目[新建文件夹Goods;文件夹 ...

  5. MobaXterm不能读取C:\Windows\system32作为系统变量

    OS环境:Win7 pro x64 已勾选:Settings-->Terminal-->勾选Use Windows PATH environment 然后在MobaXterm中查看系统变量 ...

  6. 用RIPv2实现网络区域的互通

    1.动态路由的分类: DV协议:距离矢量协议 距离矢量:路由器只能够知道邻居路由的信息 LS协议:链路状态协议 链路状态:路由器能够知道所在协议内的所有信息 RIP协议的全程是:路由信息协议(DV协议 ...

  7. PHP之高性能I/O框架:Libevent(三)

    Swoole Swoole里也提供了一些直接操作底层epoll/kqueue事件循环的接口,可将其他扩展创建的socket.PHP代码中stream/socket扩展创建的socket等加入到Swoo ...

  8. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  9. Docker导入、导出、删除容器

    1.导出某个容器导出某个容器,非常简单,使用docker export命令,语法:docker export $container_id > 容器快照名导出后在本地可以看到有一个centos.t ...

  10. 通过反射实现IOC功能

    这段时间园子里有不少介绍IOC组件的文章,由于自己也一直在学习IOC的各种组件,及IOC的思想,常见的IOC组件很多:AutoFac.Ninject.Utity包括.NET自带的MEF等.由于今天周六 ...