ASP.NET MVC的数据验证机制,比起ASP.NET WEBFORM那种高效很多。下面记录以下两个示例,以便日后方便查阅。

  方式一:在Controller里通过AddModelError方法返回错误的验证信息,看一下代码示例:

  Controller里的,注意看一下,他Add的时候提交是HTTPPOST,并且传参是传一个MODEL进来。

  1. public ActionResult Add()
  2. {
  3. return View();
  4. }
  5.  
  6. [HttpPost]
  7. public ActionResult Add(Package.Model.Message message)
  8. {
  9. if (message.gName == null)
  10. {
  11. ModelState.AddModelError("gName", "姓名不能为空");
  12. }
  13. if (message.gContent == null)
  14. {
  15. ModelState.AddModelError("gContent", "内容不能为空");
  16. }
  17.  
  18. if (ModelState.IsValid)
  19. {
  20. MessageDal msgDao = new MessageDal();
  21. msgDao.Add(message);
  22. return View();
  23. }
  24.  
  25. return View();
  26.  
  27. }
  28.  
  29. }

  View里面的

  1. @model Package.Model.Message
  2. @{
  3. Layout = null;
  4. }
  5.  
  6. <!DOCTYPE html>
  7.  
  8. <html>
  9. <head>
  10. <meta name="viewport" content="width=device-width" />
  11. <title>Add</title>
  12. </head>
  13. <body>
  14. <div>
  15. @using (Html.BeginForm())
  16. {
  17. @Html.ValidationSummary(true);
  18. <fieldset>
  19. <legend>我要留言</legend>
  20. <div>
  21. 留言名称:@Html.TextBoxFor(a => a.gName)
  22. @Html.ValidationMessageFor(a => a.gName)
  23. </div>
  24. <div>
  25. 留言内容:@Html.TextBoxFor(a => a.gContent)
  26. @Html.ValidationMessageFor(a => a.gContent)
  27. </div>
  28. <input type="submit" id="btnAdd" value="提交留言" />
  29. </fieldset>
  30. }
  31. </div>
  32. </body>
  33. </html>

  方式二:直接在MODEL层里添加上验证

  如何把数据验证交给Model呢?这里需要引用一个DLL:System.ComponentModel.DataAnnotations

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.ComponentModel.DataAnnotations;
  5. using System.Text;
  6.  
  7. namespace Package.Model
  8. {
  9. /// <summary>
  10. /// Message:实体类(属性说明自动提取数据库字段的描述信息)
  11. /// </summary>
  12.  
  13. [Serializable]
  14. public partial class Message
  15. {
  16. public Message()
  17. { }
  18. #region Model
  19. private int _id;
  20. private string _gname;
  21. private string _gcontent;
  22.  
  23. public int Id
  24. {
  25. set { _id = value; }
  26. get { return _id; }
  27. }
  28.  
  29. [DisplayName("姓名")]
  30. [Required(AllowEmptyStrings = false, ErrorMessage = "姓名不能为空")]
  31. public string gName
  32. {
  33. set { _gname = value; }
  34. get { return _gname; }
  35. }
  36.  
  37. [Required(AllowEmptyStrings = false, ErrorMessage = "内容不能为空")]
  38. public string gContent
  39. {
  40. set { _gcontent = value; }
  41. get { return _gcontent; }
  42. }
  43. #endregion Model
  44.  
  45. }
  46. }

  更多在MODEL里验证的丰富示例:

  1. namespace MvcApplication4.Models
  2. {
  3. public class UserInfo
  4. {
  5. //ID编号
  6. [ScaffoldColumn(false)]
  7. [Required(AllowEmptyStrings = false, ErrorMessage = "用户ID不能为空")]
  8. [Display(Name = "记录编号", Order = )]
  9. public int ID { get; set; }
  10.  
  11. [Display(Order = )]
  12. [Required(AllowEmptyStrings = false, ErrorMessage = "用户名不能为空")]
  13. [StringLength(, MinimumLength = , ErrorMessage = "用户名不能大于{2} 且要小于{1}")]
  14. [Remote("User", "Validate", HttpMethod = "post", ErrorMessage = "用户名已经存在")]
  15. public string UserName { get; set; }
  16.  
  17. [Display(Name="password")]
  18. [DataType(DataType.Password)]
  19. [Required(AllowEmptyStrings = false, ErrorMessage = "密码不能为空")]
  20. [StringLength(, MinimumLength = , ErrorMessage = "密码必须在{2} 和{1}之间")]
  21. public string UserPassword { get; set; }
  22.  
  23. [Required(AllowEmptyStrings = false, ErrorMessage = "邮箱必填")]
  24. [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9]+\.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
  25. public string Email { get; set; }
  26.  
  27. [Compare("Email", ErrorMessage = "邮箱要相同")]
  28. public string TEmail { get; set; } //compare 大小写要相同 否则不会触发 验证
  29.  
  30. [Display(Name = "身份证号码")]
  31. [RegularExpression(@"\d{17}[\d|x]|\d{15}", ErrorMessage = "身份证号码格式错误")]
  32. public string IdentityNo { get; set; }
  33.  
  34. [Required(AllowEmptyStrings = false, ErrorMessage = "年龄必填")]
  35. [Range(, , ErrorMessage = "年龄不能大于{2} 不能小于{1}")]
  36. public int Age { get; set; }
  37.  
  38. [ReadOnly(true)]
  39. [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
  40. [Required(ErrorMessage = "金额不能为空")]
  41. [Range(typeof(decimal), "20.0", "30.0", ErrorMessage = "金额在{1}和{2}之间")]
  42. public decimal Money { get; set; }
  43. }
  44. }

  参考文章:http://www.cnblogs.com/jiagoushi/archive/2013/01/25/2876725.html

ASP.NET MVC- 数据验证机制的更多相关文章

  1. 【MVC】ASP.NET MVC Forms验证机制

    http://www.cnblogs.com/bomo/p/3309766.html 随笔 - 121  文章 - 0  评论 - 92 [MVC]ASP.NET MVC Forms验证机制 ASP. ...

  2. 通过扩展改善ASP.NET MVC的验证机制[实现篇]

    原文:通过扩展改善ASP.NET MVC的验证机制[实现篇] 在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持, ...

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

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

  4. 【转】ASP.NET MVC 数据验证及相关内容

    原文地址:http://www.jb51.net/article/56713.htm 一.数据验证 数据验证的步骤在模型类中添加与验证相关的特性标记在客户端导入与验证相关的js文件和css文件使用与验 ...

  5. ASP.NET MVC Forms验证机制

    ASP.NET MVC 3 使用Forms身份验证 身份验证流程 一.用户登录 1.验证表单:ModelState.IsValid 2.验证用户名和密码:通过查询数据库验证 3.如果用户名和密码正确, ...

  6. asp.net mvc数据验证

    文章:asp.net mvc3 的数据验证(一) 文章:ASP.NET MVC下的四种验证编程方式 这个讲了在一个地方展示验证信息 文章:[ASP.NET MVC系列]浅谈数据注解和验证 这个在每个输 ...

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

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

  8. MVC 数据验证

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

  9. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  10. MVC 数据验证[转]

    前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解. 一.基础特性 一.Required 必填选项,当提交的表单缺少该值就引发验证错误. 二.StringLength 指定允许的长度 指 ...

随机推荐

  1. sql2005数据库转换成sql2000

    第一步:在SQL2005中生成脚本文件 ①     在2005中选中要进行转换的那个数据库,鼠标“右键”选择—“属性”—“选项”:修改“兼容级别”为“SQL Server 2000 (80)”: ②  ...

  2. UVALive 3661 Animal Run(最短路解最小割)

    题意:动物要逃跑,工作人员要截断从START(左上角)到END(右下角)的道路,每条边权表示拦截该条道路需要多少工作人员.问最少需要多少人才能完成拦截. 通俗地讲,就是把图一分为二所造成消耗的最小值. ...

  3. 【转】mac终端安装node时候,显示“-bash: brew: command not found”,怎么解决?

    原文网址:https://segmentfault.com/q/1010000004221389/a-1020000004221408 mac终端安装node时候,显示“-bash: brew: co ...

  4. ASIHttpRequest编译不通过

    转:http://blog.sina.com.cn/s/blog_67a5e47201014tof.html Undefined symbols for architecture i386:   &q ...

  5. [转] AE中如何由IFeature 如何获取所对应的FeatureClass

    转载的原文 AE中如何由IFeature 如何获取所对应的FeatureClass   先获取FeatureClass,然后遍历Map中所有的FeatureLayer,然后比较 FeatureClas ...

  6. storm入门教程 第一章 前言[转]

    1.1   实时流计算 互联网从诞生的第一时间起,对世界的最大的改变就是让信息能够实时交互,从而大大加速了各个环节的效率.正因为大家对信息实时响应.实时交互的需求,软件行业除了个人操作系统之外,数据库 ...

  7. codeforces 700B Connecting Universities 贪心dfs

    分析:这个题一眼看上去很难,但是正着做不行,我们换个角度:考虑每条边的贡献 因为是一棵树,所以一条边把树分成两个集合,假如左边有x个学校,右边有y个学校 贪心地想,让每条边在学校的路径上最多,所以贡献 ...

  8. HDU-4632 http://acm.hdu.edu.cn/showproblem.php?pid=4632

    http://acm.hdu.edu.cn/showproblem.php?pid=4632 题意: 一个字符串,有多少个subsequence是回文串. 别人的题解: 用dp[i][j]表示这一段里 ...

  9. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  10. 为什么你写的Python运行的那么慢呢?

    大约在一年前,也就是2013年在Waza(地名),Alex Gaynor提到了一个很好的话题:为什么用Python.Ruby和Javascript写的程序总是运行的很慢呢?正如他强调的,关键就是现在出 ...