转自:http://blog.sina.com.cn/s/blog_c21a857b0102wcus.html

常用的 DataAnnotations

1.Required :属性值必须非空或者不能只是空格,如果允许全空格可以[Required(AllowEmptyStrings = true)]

2.DisplayName :显示名 – 定义表单字段的提示名称

3.StringLength :字符串长度不能超过给定的最大长度,也可以指定最小长度:[StringLength(10, MinimumLength=2)]

4.Range :范围 – 数字的可输入范围[Range(10, 20)] ,属性值必须在指定的数值范围内,可以使用数值类型的最大最小值比如int.MinValue、int.MaxValue

5.Bind :绑定 – 列出在将请求参数绑定到模型的时候,包含和不包含的字段

6.ScaffoldColumn :支架列 - 在编辑表单的时候,需要隐藏起来的的字符    [ScaffoldColumn(true|false)]

7.Compare: 比较 - 与制定的字段值进行比较 具体见代码    [Compare("MyOtherProperty")]两个属性必须相同值,比如我们要求用户重复输入两次邮件地址时有用

8.RegularExpre ssion: 正则表达式匹配,字符串值必须匹配正则表达式,默认大小写敏感,可以使用(?i)修饰符关闭大小写敏感,比如[RegularExpre ssion("(?i)mypattern")]

9.DataType :在前端显示的文本框类型

10. Remote :服务端验证

11. [Editable(false)] //放在主键上显示不可修改

客户端验证

关于Model层数据验证的一些验证规则与相关验证属性标签小集

(1)常规验证(必填字段、字符串长度、正则表达式验证、范围验证<</span>数值、日期>等)

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. 正则验证

[RegularExpre ssion(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]

public string Email { get; set; }

4. 范围

[Range(35,44, UIHint("IntSlider"))] //左右托动块

public int Age { get; set; }

小数的情况:

[Range(typeof(decimal), “0.00”, “49.99”)]

public decimal Price { get; set; }

5. 服务端参与的验证

[Remote(“CheckUserName”, “Account”, ErrorMessage = "该姓名已存在")]

public string UserName { get; set; }

Remote异步请求验证,在[HttpGet]时获取指定Controller里面的指定方法验证, 次方法必须是[HttpGet]标记的,返回类型为Json类型的JavaScript对象。

然后在AccountController里指定一个CheckUserName方法:

public JsonResult CheckUserName(string username)

{

var result = Membership.FindUsersByName(username).Count == 0;

return Json(result, JsonRequestBehavior.AllowGet);

}

6. 比较

[RegularExpre ssion(@”[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; }

public string EmailConfirm { get; set; }

7. 自定义错误消息

正则:

[RegularExpre ssion(@”[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; }

具体示例如下:

[DisplayName("分组名称")]

[Required(ErrorMessage = "请输入账号")]

[StringLength(50, ErrorMessage = "请勿输入超过 50 个字")]

public string Name { get; set; }

[DisplayName("排序字段")]

[DataType(DataType.Password)]

[Required(ErrorMessage = "请输入排序字段")]

[RegularExpre ssion(@"^([\d]+)$", ErrorMessage = "请输入正确的Email.")]

public string Sequence { get; set; }

[DisplayName("备注")]

[DataTyle(DataType.MultilineText)]//数据显示为多文本

[Required(AllowEmptyStrings=true, ErrorMessage = "请输入中文姓名")]

[StringLength(50, ErrorMessage = "请勿输入超过 50 个字")]

public string Describe { get; set; }

[DisplayName("账号")]

[Required(ErrorMessage = "请输入账号")]

[StringLength(50, ErrorMessage = "请勿输入超过 50 个字")]

public string Account { get; set; }

[DisplayName("密码")]

[DataType(DataType.Password)]

[Required(ErrorMessage = "请输入密码")]

[StringLength(50, ErrorMessage = "请勿输入超过 50 个字")]

public string Password { get; set; }

[Required]

[DataType(DataType.Password)]

[Display(Name = "Current password")]

public string OldPassword { get; set; }(PMS已有

[Required]

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]

[DataType(DataType.Password)]

[Display(Name = "New password")]

public string NewPassword { get; set; }(PMS已有)

[Display(Name = "确认密码")]

[Compare("LogPassword", ErrorMessage = "密码必须一致")]

public virtual string LogPasswordConfirm { get; set; }(PMS已有)

[Display(Name = "Remember me?")]

public bool RememberMe { get; set; }(PMS已有)

[DisplayName("姓名")]

[Required(ErrorMessage = "请输入姓名")]

[StringLength(50, ErrorMessage = "请勿输入超过 50 个字")]

public string ChName { get; set; }  (PMS已有)

[DisplayName("昵称")]

[Required(ErrorMessage = "请输入昵称")]

[StringLength(50, ErrorMessage = "请勿输入超过 50 个字")]

public string NickName { get; set; }

[Display(Name = "出生日期")]

//[Range(typeof(DateTime), "2011-12-31", "1950-1-1", ErrorMessage = "{0}的范围是{1}到{2}")]

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]//显示格式

public virtual DateTime? Birthday { get; set; } //表示值可为Null

[DisplayName("年龄")]

[Range(1, int.MaxValue, ErrorMessage = "请输入大于等于1的数")]

public int Age { get; set; }

[DisplayName("Email")]

[Required(ErrorMessage = "请输入Email")]

[StringLength(255, ErrorMessage = "请勿输入超过 255 个字")]

[RegularExpre ssion(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4})$", ErrorMessage = "请输入正确的Email.")]

[DataType(DataType.EmailAddress)]

public string Email { get; set; } (PMS已有)

[DisplayName("电话号码")]

[RegularExpre ssion(@"^((0\d{2,5}-)|0\d2,50\d2,5)?\d{7,8}(-\d{3,4})?$", ErrorMessage = "电话格式有误。\n有效格式为:\n①本区7或8位号码[-3或4位分机号码,可选]\n②(3~5位区号)7或8位号码[-3或4位分机号码,可选]\n③3~5位区号-7或8位号码[-3或4位分机号码,可选]\n示例:023-12345678;(023)1234567-1234")]

public string Phone { get; set; }

[Display(Name = "身份证号码")]

[RegularExpre ssion(@"\d{17}[\d|X]|\d{15}", ErrorMessage = "{0}的格式不正确")]

public virtual string IdentityNo { get; set; }

[DisplayName("是否为管理员")]

public bool IsAdmin { get; set; }

[DisplayName("代表图示")]

[Required(ErrorMessage = "请选择代表图示")]

[Range(1, 3, ErrorMessage = "输入的值必须介于 1 到 3之间")]

public int AvatarIcon { get; set; }

[Display(Name = "逻辑删除标识")]

public virtual int IsLogicDelete { get; set; }

[DisplayName("验证码")]

public string AuthCode { get; set; }

[DisplayName("创建日期")]

public DateTime CreateTime { get; set; }

[DisplayName("网址")]

[RegularExpre ssion(@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?", ErrorMessage = "请输入合法的网址!\n示例:

https://abc.a;http://www.abc.dd") ]

public string Httpaddress { 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; }

(2)数据库约束验证

如果不希望用户使用123456这样的过于简单的密码,可以使用check约束来实现:

ALTER TABLE staffinfoes WITH NOCHECK  ADD CONSTRAINT chk_logPassword

CHECK (logPassword NOT IN('123','123123','123456'))

其中,staffinfoes是表名称,chk_logPassword是约束名称,logPassword是列名称

DataAnnotations 验证的更多相关文章

  1. 使用System.ComponentModel.DataAnnotations验证字段数据正确性

    在.NET MVC 中,当页面提交model到Action的时候,自动填充ModelState.使用ModelState.IsValid进行方便快捷的数据验证,其验证也是调用命名空间System.Co ...

  2. Web Api 模型验证

    1.模型建立,在模型上类上添加System.ComponentModel.DataAnnotations验证属性 public class Product { public int Id { get; ...

  3. 应用程序框架实战十五:DDD分层架构之领域实体(验证篇)

    在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了 ...

  4. MVC Model数据验证

    概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.Co ...

  5. ASP.NET MVC3中Model验证

    原文:ASP.NET MVC3中Model验证 概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验 ...

  6. DDD分层架构之领域实体(验证篇)

    DDD分层架构之领域实体(验证篇) 在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容—— ...

  7. WebApiClient的接口输入验证

    1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍WebApiClient的接口参数输入有效性验证的新特性. ...

  8. C# MVC验证Model

    .NET Core MVC3 数据模型验证的使用 这里我先粘贴一个已经加了数据验证的实体类PeopleModel,然后一一介绍. using System; using System.Collecti ...

  9. [MVC4]Data Annotations Extensions:无法使用EmailAddress等验证特性的解决方法

    本文地址:http://www.cnblogs.com/egger/p/3404159.html  欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 数据注解(Data Annotations) Web应用 ...

随机推荐

  1. OCI 编程

    一.环境的配置 1.系统环境:要想使用OCI编程需要安装Oracle的客户端,而这个普通的客户端比较大,方便起见,可以安装即时客户端(Instantclient)作为Oracle的访问客户端.  具体 ...

  2. UI设计规范:单选按钮 vs 复选框,没那么简单

    无论是网页设计,还是移动app设计,都经常用到单选按钮和复选框这两个组件.这两个组件看似意义明确,很好区分,但在实际设计中却很容易用错,带来不好的用户体验. 本文中我通过列举几个典型的错误用法,帮助设 ...

  3. 一次HBase问题的解决过程(Status: INCONSISTENT)

    ==版本信息== HBase:2.7.1 Storm:1.0.1 RocketMQ:3.4.6(阿里版) ==问题描述== 2018年9月3号晚上23点左右,例行巡检系统运行状况时, 发现Storm消 ...

  4. 美团点评2017校招笔试真题-算法工程师A

    美团点评2017校招笔试真题-算法工程师A 1.下面哪种STL容器的实现和其它三个不一样 A. set B. deque C. multimap D. map 正确答案: B STL的容器可以分为以下 ...

  5. 2018.09.15[POI2008]BLO-Blockade(割点)

    描述 There are exactly nn towns in Byteotia. Some towns are connected by bidirectional roads. There ar ...

  6. Docker swarm结合Openresty部署rabbitmq集群

    Docker swarm结合Openresty部署rabbitmq集群 大家好,年底了,年味儿越来越浓了.2019年的寒冬被定义为未来10年中最好的一年,对于这一说法悲观的人和乐观的人的理解是不一样的 ...

  7. 静态代码块和this

    /* 静态代码块.随着类的加载而执行.而且只执行一次. 作用: 用于给类进行初始化. */class StaticCode{ static int num ; static { num = 10;// ...

  8. Restful风格wcf调用4——权限认证

    写在前面 在前面的三篇文章,已经介绍了restful风格wcf,如何实现增删改查以及文件的上传下载操作.本篇文章将介绍一下,调用restful的权限认证的内容.在调用的接口,为了安全,总会需要对请求进 ...

  9. #ing#我的日常知识管理160421

    1. 知识来源:浏览是无时无刻的,知识爆炸的时代,信息在互联网上不再难以获得,却变得难以选择,取得有效的信息成了如今获取知识的重要环节…… 前端关注—— alloyteam.github.io  腾讯 ...

  10. xib创建cell的两种方法

    方法一:第一步:[self.collectionView registerNib:[UINib nibWithNibName:@"QGLShareBtnCell" bundle:n ...