本文属转载,来源:

http://www.byywee.com/page/M0/S868/868615.html

关于Model验证官方资料:

http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx

ASP.NET MVC3中的Model是自验证的,这是经由过程.NET4的System.ComponentModel.DataAnnotations定名空间完成的。 我们要做的只是给Model类的各属性加上对应的验证标识表记标帜(Attributes)就可以让MVC3框架帮我们完成验证。我以MVC3项目模板自带的登录 做例子讲解Model的验证。

一、启用客户端验证:

客户端验证主如果为了进步用户体验,在网页不回刷的景象下完成验证。

第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了:

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

然后在被验证的View页面上要参加如许两个JavaScript,重视,他们是依附于JQuery的:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

验证消息的显示有两种,一种是ValidationSummary,它可以显示一份验证消息的汇总,包含从后台Action里返回的消息。

@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")

另一种是Model中各属性对应HTML控件的验证消息:

@Html.ValidationMessageFor(m => m.UserName)

二、在Model中参加验证标识表记标帜

MVC3项目模板自带的登录模型类如下:

public class LogOnModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }
 
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
 
    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

对比通俗的C#类,我们发明每个属性上都多了被方括号“[]”包抄的标识表记标帜。此中,[Required]是验证标识表记标帜的一种,而[Display]、[DataType]则是为了显示对应的HTML控件,这不在本文评论辩论局限之内。

除了Required,我们还可以在Model中添加其他有效的验证标识表记标帜。下面是个较完全的列表:

Model类中可以添加的验证标识表记标帜:

1. 必填字段
[Required]
public string FirstName { get; set; }
2. 字段长度
至多n位:
[StringLength(160)]
public string FirstName { get; set; }
请求至少n位:
[StringLength(160, MinimumLength=3)]
public string FirstName { get; set; }

3. 正则验证

[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”)]
public string Email { get; set; }

4. 局限
[Range(35,44)]
public int Age { get; set; }
小数的景象:
[Range(typeof(decimal), “0.00”, “49.99”)]
public decimal Price { get; set; }

5. 办事端参与的验证

[Remote(“CheckUserName”, “Account”)]
public string UserName { get; set; }
然后在AccountController里指定一个CheckUserName办法:
public JsonResult CheckUserName(string username)
{
    var result = Membership.FindUsersByName(username).Count == 0;
    return Json(result, JsonRequestBehavior.AllowGet);
}

 6. 斗劲
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”)]
public string Email { get; set; }
[Compare(“Email”)]
public string EmailConfirm { get; set; }

7. 自定义错误消息
正则:
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}”,
ErrorMessage=”Email doesn’t look like a valid email address.”)]
public string Email { get; set; }

通俗文本:

[Required(ErrorMessage=”Your last name is required”)]
[StringLength(160, ErrorMessage=”Your last name is too long”)]
public string LastName { get; set; }

占位符:

[Required(ErrorMessage=”Your {0} is required.”)]
[StringLength(160, ErrorMessage=”{0} is too long.”)]
public string LastName { get; set; }

三、后台Action的写法

Action里要做的有两件事:断定ModelState是否合法、添加错误消息。MVC3模板自带的登录Action如下:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("///"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }
 
    // If we got this far, something failed, redisplay form
    return View(model);
}

[HttpPost]默示这个Action只能经由过程POST动作调用,这是为了共同View里的表单,因为FORM的ACTION是POST(当然也可所以GET),不过这不在本文的评论辩论局限内。

if (ModelState.IsValid) 是重点,若是不出不测,即客户端浏览器没有封闭JavaScript,并且客户不是个黑客(黑客可能会经由过程一些对象模仿POST),那只要经由过程正常路子 POST到这个Action的Model都应当是IsValid的。当然,编程的一个首要原则是不克不及信赖用户的输入,所以我们有须要再断定一次 ModelState.IsValid。

ModelState.AddModelError办法是给View返回一个错误消息,终极交给@Html.ValidationSummary显示。

最后附上常用正则表达式(网上找的)

数字:"^[0-9]*¥"。

n位的数字:"^/d{n}¥"。

至少n位的数字:"^/d{n,}¥"。

m~n位的数字:。"^/d{m,n}¥"

零和非零开首的数字:"^(0|[1-9][0-9]*)¥"。

有两位小数的正实数:"^[0-9]+(.[0-9]{2})?¥"。

有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?¥"。

非零的正整数:"^/+?[1-9][0-9]*¥"。

非零的负整数:"^/-[1-9][]0-9"*¥。

长度为3的字符:"^.{3}¥"。

由26个英文字母构成的字符串:"^[A-Za-z]+¥"。

由26个大写英文字母构成的字符串:"^[A-Z]+¥"。

由26个小写英文字母构成的字符串:"^[a-z]+¥"。

由数字和26个英文字母构成的字符串:"^[A-Za-z0-9]+¥"。

由数字、26个英文字母或者下划线构成的字符串:"^/w+¥"。

验证用户暗码:"^[a-zA-Z]/w{5,17}¥"正确格局为:以字母开首,长度在6~18之间,只能包含字符、数字和下划线。

验证是否含有^%&’,;=?¥/"等字符:"[^%&’,;=?¥/x22]+"。

只能输入汉字:"^[/u4e00-/u9fa5]{0,}¥"

验证Email地址:"^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*¥"。

验证InternetURL:"^http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?¥"。

验证德律风号码:"^(/(/d{3,4}-)|/d{3.4}-)?/d{7,8}¥"正确格局为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

验证身份证号(15位或18位数字):"^/d{15}|/d{18}¥"。

验证一年的12个月:"^(0?[1-9]|1[0-2])¥"正确格局为:"01"~"09"和"1"~"12"。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)¥"正确格局为;"01"~"09"和"1"~"31"。

mvc Model验证总结及常用正则表达式的更多相关文章

  1. 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    本文属转载,来源: http://www.byywee.com/page/M0/S868/868615.html 关于Model验证官方资料: http://msdn.microsoft.com/zh ...

  2. 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    转自:http://www.cnblogs.com/easy5weikai/p/3843131.html 关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/ ...

  3. asp.net mvc Model验证总结及常用正则表达式【转载】

    关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx AS ...

  4. 详解ASP.NET MVC Model验证

    ASP.NET mvc的最好的优点之一就是支持Model验证,这个特性很方便你可以选择在定义Model的时候在字段中采用特性进行注解约定,也可以在代码中自己进行手动验证.下面就来细说一下ASP.NET ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 20170706xlVBA汇总历时对阵数据

    Public Sub GatherFilesData() Application.ScreenUpdating = False Application.DisplayAlerts = False Ap ...

  2. python全栈开发,Day1(python介绍,变量,if,while)

    python基础一 一,Python介绍 python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为 ...

  3. 赵炯博士《Linux内核完全注释》

    赵炯:男,1963年10月5日出生,江苏苏州人,汉族. 同济大学机械工程学院机械电子教研室副教授,从事教学和科研工作. 现在主要为硕士和博士研究生开设<计算机通信技术>.<计算机控制 ...

  4. How-to: Use HBase Bulk Loading, and Why

    How-to: Use HBase Bulk Loading, and Why http://blog.cloudera.com/blog/2013/09/how-to-use-hbase-bulk- ...

  5. 『MXNet』第三弹_Gluon模型参数

    MXNet中含有init包,它包含了多种模型初始化方法. from mxnet import init, nd from mxnet.gluon import nn net = nn.Sequenti ...

  6. 【oauth2.0】【2】JAVA 客户端模式

    含义:用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题 步骤: (A)客户端向认证服务器进行身份认证,并要求一个访问令牌(token). (B ...

  7. MSMQ 概述

    MSMQ 概述 1) MSMQ概述 MSMQ 表示微软消息队列服务.MSMQ 可以工作在在线或者离线场景,并提供异步编程功能.如果客户端离线,MSMQ将会是最合适的方法,这是因为服务端不需要等待客户端 ...

  8. IntelliJ IDEA2017创建web工程并实现远程部署tomca【转载】

    [IntelliJ IDEA2017创建web工程并实现远程部署tomcat] 作者:https://segmentfault.com/a/1190000012762629 将应用打成war包方式 步 ...

  9. ActiveMQ的spring配置文件

    从官网copy出来,做了部分修改: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

  10. 服务器性能调优(netstat监控大量ESTABLISHED连接与Time_Wait连接问题)

    netstat监控大量ESTABLISHED连接与Time_Wait连接问题 问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连 ...