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 元数据验证的更多相关文章

  1. ASP.NET MVC Model验证(四)

    ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...

  2. ASP.NET MVC 2 验证

    来源:http://www.cnblogs.com/jhxk/articles/2612885.html  只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...

  3. 通过扩展改善ASP.NET MVC的验证机制[使用篇]

    原文:通过扩展改善ASP.NET MVC的验证机制[使用篇] ASP.NET MVC提供一种基于元数据的验证方式是我们可以将相应的验证特性应用到作为Model实体的类型或者属性/字段上,但是这依然具有 ...

  4. ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的

    在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...

  5. ASP.NET MVC Model验证(五)

    ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...

  6. ASP.NET MVC Model验证(三)

    ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...

  7. ASP.NET MVC Model验证(二)

    ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...

  8. ASP.NET MVC Model验证(一)

    ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后 ...

  9. MVC 数据验证

    MVC 数据验证 前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解.System.ComponentModel.DataAnnotations 一.基础特性 一.Required 必填 ...

随机推荐

  1. ~postman使用Runner

    1.准备参数的.text文件. postman支持三种参数的方式,分别为.text文件,.csv文件,json文件.此处使用.text文件.编码格式使用utf-8 2.替换请求参数 3.设置Runne ...

  2. 关于python的一次性能调优过程

    问题 这两天在公司帮老大写一个程序功能,要求抓取从elasticsearch和kibana服务器上返回的数据,统计所有hits的数据字段ret_code为0的hit,并计算其占有率等一些功能. 功能倒 ...

  3. Scratch编程:快乐的小马(三)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一匹小马跑来跑去(小马有跑动 ...

  4. 2019 牛客多校五 F. maximum clique 1 (最大团)

    大意: 给定$n$个互不相同的数, 若两个数异或后二进制中$1$的个数不少于$2$则连边, 求最大团. 最大团转为补图最大独立集. 可以发现补图是二分图, 所以直接$dinic$即可. 最大独立集相当 ...

  5. ifconfig介绍

    [root@controller01 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNK ...

  6. 火狐浏览器 访问所有HTTPS网站显示连接不安全解决办法

    当 Firefox 连接到一个安全的网站时(网址最开始为“https://”),它必须确认该网站出具的证书有效且使用足够高的加密强度.如果证书无法通过验证,或加密强度过低,Firefox 会中止连接到 ...

  7. 在论坛中出现的比较难的sql问题:24(生成时间段)

    原文:在论坛中出现的比较难的sql问题:24(生成时间段) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下来 ...

  8. VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别

    原文转自 https://www.cnblogs.com/zhwl/archive/2012/11/29/2794509.html ATL是ActiveXTemplateLibrary的缩写,它是一套 ...

  9. Linux 常见压缩格式详解

    linux 文件压缩格式详解 压缩文件原理 在计算机科学和信息论中,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据比特(或者其它信息相关的单位)表示信息的过程.例如,如果我们将" ...

  10. nginx的access_log与error_log

     参考文章:https://juejin.im/post/5aa09bb3f265da238f121b6c 本篇文章主要介绍一下 nginx 服务器两种日志查看:access_log.error_lo ...