MVC 元数据验证
ASP.NET MVC 3 Validation - 正则表达式验证RegularExpressionAttribute之日期验证
http://blog.csdn.net/jackvs/article/details/6701186
C#中Dictionary的用法
http://jingyan.baidu.com/article/9989c7460ab872f648ecfeed.html
String.Format格式说明
http://www.cnblogs.com/tuyile006/archive/2006/07/13/449884.aspx
《Pro ASP.NET MVC 3 Framework》学习笔记之三十一 【模型验证】
http://www.cnblogs.com/mszhangxuefei/archive/2012/05/28/mvcnotes_31.html
HTML5 Form Validation Examples
http://www.the-art-of-web.com/html/html5-form-validation/
jQuery Validation Plugin
http://www.the-art-of-web.com/html/html5-form-validation/
1.ModelState.IsValid用来判断model是否通过验证,前台显示如下
@Html.ValidationSummary()
@Html.ValidationMessageFor(model => model.TestName)
2.ModelState 是个Dictionary类型
ModelState.AddModelError("testName","* Test Name is not valid.");
ModelState["TestName"].Errors.Count()
3.DateTime
[DataType(DataType.DateTime,ErrorMessage="Please input date value")] // ErrorMessage is not valid
public DateTime TestTime { get; set; }
DataType后边的Error Message不起作用,不能覆盖生成元素的data-val-date/data-val-number属性,可能对于特殊字符串email,url类型的比较有用
[Required(ErrorMessage = "Please input a date value")] 也无效
[RegularExpression(@"^(?:(?!0000)[0-9]{4}(-|\/)(?:(?:0[1-9]|1[0-2])(-|\/)(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])(-|\/)(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)(\s+([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$",
ErrorMessage = "Please input a date(YYYY/MM/DD) value")] 有效
但这样比较累赘,还有个简单替换生成元素属性的方法,将-替换成_就可以代替自动生成的信息了
@Html.TextBoxFor(m => m.Test, new { @data_val_date="please input a valid date"})
这样我们可以直接添加下列属性来实现客户端的认证
data_val_number,data_val_date
data_val_email 无效
data_val_required
data-val-regex-pattern,data-val-regex
data-val-length-min,data-val-length-max,data-val-length
data-val-range-min,data-val-range-max,data-val-range
data-val-remote-url,data-val-remote-type,data-val-remote-additionalfields,data-val-remote 无效
有的时候很奇怪,只对@Html.EditorFor(m => m.Test)有效,却对@Html.TextBoxFor(m => m.Test)无效,属性不能正确生成
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
这种写法只对@Html.DisplayFor(mbox=>mbox.Test)和@Html.EditorFor(mbox=>mbox.Test)才有效,
对于@Html.LabelFor(mbox=>mbox.Test)和@Html.TextBoxFor(mbox=>mbox.Test)无效
4.String
[Display(Name = "Test Name")]
[Required(ErrorMessage = "Please input the test name.")]
[StringLength(10,ErrorMessage="The length can't longer than 10")]
[StringLength(, MinimumLength=)]
[RegularExpression(@"([a-g])*", ErrorMessage = "Please input valid character")]
public string TestName { get; set; }
<input name="Test Name" class="text-box single-line" id="Test" type="text" data-val="true" data-val-regex-pattern="([a-g])*" data-val-regex="valid character" data-val-length-min="3" data-val-length-max="10" data-val-length="length should be 3~10" value=""/>
[DataType(DataType.Password)]
public string Test { get; set; }
<input name="Test" class="text-box single-line valid" id="Test" type="password" value=""/>
5.Number
[Range(1, 100, ErrorMessage = "Please input 1~100.")]
public int Test { get; set; }
<input name="Test" class="text-box single-line" id="Test" type="number" data-val-required="Test is required" data-val="true" data-val-number="Test is not a valid number" data-val-range-min="1" data-val-range-max="100" data-val-range="input 1~100" value="0"/>
6.Enum Type
public enum eReorderLvl
{
five = 5,
ten = 10
}
[EnumDataType(typeof(eReorderLvl), ErrorMessage = "Please input 5,10")]
public int Test { get; set; }
7.Bool
[Range(typeof(bool), "true", "true", ErrorMessage="你必须接受条款")]
public bool TermsAccepted { get; set; }
<input name="Test" class="check-box" id="Test" type="checkbox" data-val-required="Test is required" data-val="true" data-val-range-min="True" data-val-range-max="True" data-val-range="must true" value="true"/>
8.以上是属于System.ComponentModel.DataAnnotations,也可以实时验证,使用System.Web.Mvc.RemoteAttribute
[Remote("CheckIfExist", "TestName", HttpMethod = "POST", AdditionalFields = "TestId", ErrorMessage = "Test Name already exists.")]
public string TestName { get; set; }
<input name="TestName" class="required" id="TestName" type="text" data-val="true" data-val-remote-url="/Test/CheckIfExist" data-val-remote-type="POST" data-val-remote-additionalfields="*.TestName,*.TestId" data-val-remote="Test Name already exists" data-fieldname="TestName"
value="aaa"/>
9.如果想为基本的类型也在客户端实时验证,可以使用
jquery.unobtrusive-ajax.js
jquery.validate.js
Jquery.validate.unobtrusive.js
<appSettings>
...
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
MVC 元数据验证的更多相关文章
- ASP.NET MVC Model验证(四)
ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...
- ASP.NET MVC 2 验证
来源:http://www.cnblogs.com/jhxk/articles/2612885.html 只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...
- 通过扩展改善ASP.NET MVC的验证机制[使用篇]
原文:通过扩展改善ASP.NET MVC的验证机制[使用篇] ASP.NET MVC提供一种基于元数据的验证方式是我们可以将相应的验证特性应用到作为Model实体的类型或者属性/字段上,但是这依然具有 ...
- ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的
在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...
- ASP.NET MVC Model验证(五)
ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...
- ASP.NET MVC Model验证(三)
ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...
- ASP.NET MVC Model验证(二)
ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...
- ASP.NET MVC Model验证(一)
ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后 ...
- MVC 数据验证
MVC 数据验证 前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解.System.ComponentModel.DataAnnotations 一.基础特性 一.Required 必填 ...
随机推荐
- golang的for循环基本语法
- 【LEETCODE】33、LeetCode的Given a non-negative integer numRows, generate the first numRows of Pascal's triangle
package y2019.Algorithm.array; import java.util.ArrayList; import java.util.List; /** * @ProjectName ...
- Springboot入门及配置文件介绍(内置属性、自定义属性、属性封装类)
目的: 1.Springboot入门 SpringBoot是什么? 使用Idea配置SpringBoo使用t项目 测试案例 2.Springboot配置文件介绍 内置属性 自定义属性 属性封装类 Sp ...
- 采用二进制方式安装K8S集群,版本etcd-v3.3.10,flannel-v0.11.0,kubernetes-server-linux-amd64
官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...
- 如何录屏做GIF图
网上找了一下,ScreenToGif 这个神器 https://github.com/NickeManarin/ScreenToGif https://github.com/NickeManarin/ ...
- 浅学CLR via C#笔记之类型转换
我们都知道CLR最重要的一个特性就是类型安全,它在运行时就知道对象类型. 但我们会经常用到将一种类型转换成另一种类型,CLR也允许将对象转成他的实际类型,或者是它的基类型. 在C#中,支持隐士转换成它 ...
- OAuth 2.0 简介
是什么: 授权框架/授权标准/授权协议(授权指的是授予你能做什么的权力) 干什么: 授权 使第三方应用程序或客户端获得对HTTP服务上用户帐户信息的有限访问权限(例如 Google,GitHub ) ...
- axios 内部原理学习记录
前提:一次面试被问到了,axios有什么特点,对比一下ajax.答的很不满意. axios是一个基于Promise的http请求库,可用于浏览器和 Node.可以说是目前最为常用的http库,有必要了 ...
- HTTP抓包实战
HTTP:超文本传输协议 允许将HTTP文档从Web服务器传送到客户端的浏览器.HTTP请求报文分为3部分.第一部分叫做起始行(Request line).第二部分叫首部(Request Header ...
- MySQL 查询优化 - 关联查询
1. 关联查询执行流程 MySQL执行关联查询的策略很简单,他会从一个表中循环取出单条数据,然后用该条数据到下一个表中寻找匹配的行,然后回溯到上一个表,到所有的数据匹配完成为止.因此也被称为" ...