asp.net mvc中的后台验证
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中的后台验证的更多相关文章
- ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)
在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...
- asp.net mvc 中的自定义验证(Custom Validation Attribute)
前言
- 再议ASP.NET MVC中CheckBoxList的验证
在ASP.NET MVC 4中谈到CheckBoxList,经常是与CheckBoxList的显示以及验证有关.我在"MVC扩展生成CheckBoxList并水平排列"中通过扩展H ...
- ASP.NET MVC中使用FluentValidation验证实体
1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...
- ASP.NET MVC中使用FluentValidation验证实体(转载)
1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...
- ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式
方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start ...
- asp.net MVC 中 Session统一验证的方法
验证登录状态的方法有:1 进程外Session 2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseContro ...
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...
- ASP.NET MVC中商品模块小样
在前面的几篇文章中,已经在控制台和界面实现了属性值的笛卡尔乘积,这是商品模块中的一个难点.本篇就来实现在ASP.NET MVC4下商品模块的一个小样.与本篇相关的文章包括: 1.ASP.NET MVC ...
随机推荐
- SVN 分支主干的相互合并
1.主干合并到分支 1在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已经完全同步, 2.在/branches /MyProject上右键,依次选择”Tor ...
- Spark SQL 性能优化再进一步:CBO 基于代价的优化
摘要: 本文将介绍 CBO,它充分考虑了数据本身的特点(如大小.分布)以及操作算子的特点(中间结果集的分布及大小)及代价,从而更好的选择执行代价最小的物理执行计划,即 SparkPlan. Spark ...
- cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式
cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式 一.在Windows环境下搭建SFTP服务器可参见http://www.cnblogs.com/Kevin00/p/6341295. ...
- python 装饰方法
def _concurrent(func): @wraps(func) # 加入这个的目的是保持原来方法的属性 def arg_wrapper(self, *args, **kwargs): try: ...
- Kafka的Log存储解析
引言 Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的.每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建 ...
- JavaWeb学习 (十八)————JSP标签
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- [SHOI2006] 有色图
Description 给一张 \(n\) 个点的无向完全图,同时还有 \(m\) 种颜色.要求给每条边染色,问有多少种不同的染色方案.两种方案不同当且仅当顶点标号任意重排后不同.\(n\leq 53 ...
- Vue之项目搭建
一.Vue自动化工具的安装 nvm:nodejs 版本管理工具. 也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本. nodejs:在项目开发时的所需要的代码库 npm:nodej ...
- 无法初始化 PowerShell 主机解决方案
Question无法初始化 PowerShell 主机.如果您的 PowerShell 执行策略设置设为 AllSigned,请先打开程序包管理器控制台以初始化该主机. --------------- ...
- AngularJS+Ionic开发-2.项目结构介绍
使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...