1、使用ModelState在Action中进行验证

  1. [HttpPost]
  2. public ViewResult MakeBooking(Appointment appt) {
  3. if (string.IsNullOrEmpty(appt.ClientName)) {
  4. ModelState.AddModelError("ClientName", "Please enter your name");
  5. }
  6. if (ModelState.IsValidField("Date") && DateTime.Now > appt.Date) {
  7. ModelState.AddModelError("Date", "Please enter a date in the future");
  8. }
  9. if (!appt.TermsAccepted) {
  10. ModelState.AddModelError("TermsAccepted", "You must accept the terms");
  11. }
  12. if (ModelState.IsValid) {
  13. return View("Completed", appt);
  14. } else {
  15. return View();
  16. }
  17. }

  1. 2Model元数据验证
  1. [DisplayName("用户名")]
  2. [Required(ErrorMessage = "请输入用户名")]
  3. public string UserName { get; set; }
  4.  
  5. [DisplayName("是否删除")]
  6. [Required]
  7. public int? IsDelete { get; set; }
  8.  
  9. [DisplayName("用户状态")]
  10. [Required]
  11. public int? UserStatus { get; set; }
  12.  
  13. [DisplayName("初始日期")]
  14. [Required]
  15. [DataType(DataType.Date)]
  16. [DateRange("2014-03-01", "2014-05-01")]
  17. public DateTime? BirthDate { get; set; }
  18.  
  19. [DisplayName("创建日期")]
  20. [Required]
  21. [DataType(DataType.Date)]
  22. public DateTime? CreateTime { get; set; }
  1. 自定义验证,主要是实现ValidationAttribute类的IsValid方法,下面的类定义了对输入时间范围的验证
  1. public class DateRangeAttribute : ValidationAttribute
  2. {
  3. private string begin;
  4. private string end;
  5. public DateRangeAttribute(string begin, string end)
  6. {
  7. this.begin = begin;
  8. this.end = end;
  9. }
  10.  
  11. public override bool IsValid(object value)
  12. {
  13. DateTime dtBegin;
  14. DateTime dtEnd;
  15. DateTime dtValue;
  16.  
  17. if (value == null || !DateTime.TryParse(value.ToString(), out dtValue))
  18. {
  19. ErrorMessage = "错误的输入日期格式";
  20. return false;
  21. }
  22.  
  23. if (!DateTime.TryParse(begin.ToString(), out dtBegin))
  24. {
  25. ErrorMessage = "错误的开始日期格式";
  26. return false;
  27. }
  28.  
  29. if (!DateTime.TryParse(end.ToString(), out dtEnd))
  30. {
  31. ErrorMessage = "错误的结束日期格式";
  32. return false;
  33. }
  34.  
  35. if (dtValue < dtBegin || dtValue > dtEnd)
  36. {
  37. ErrorMessage = string.Format("输入日期必须大于{0}并且大于{1}", begin.ToString(), end.ToString());
  38. return false;
  39. }
  40.  
  41. return true;
  42. //return base.IsValid(value);
  43. }
  1.  
  1. 3、实现IValidatableObject接口,实现单独方法验证
  1.  
  1. public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
  2. {
  3. UserInfoViewModel userInfo = validationContext.ObjectInstance as UserInfoViewModel;
  4.  
  5. if (null == userInfo)
  6. {
  7. yield break;
  8. }
  9.  
  10. if (string.IsNullOrEmpty(userInfo.UserName))
  11. {
  12. yield return new ValidationResult("'UserName'是必需字段", new string[] { "UserName" });
  13. }
  14. if (userInfo.UserName != "")
  15. {
  16. yield return new ValidationResult("'UserName'必须为123", new string[] { "UserName" });
  17. }
  18. }
  1. 4、启动客户端验证
    4.1 配置文件

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

4.2 View

@Html.ValidationSummary(true)

@Html.LabelFor(m => m.BirthDate):
@Html.EditorFor(m => m.BirthDate)
@Html.ValidationMessageFor(m => m.BirthDate)

  1. 4.3 生成的Html代码
  1. <input class="text-box single-line input-validation-error" data-val="true" data-val-number="字段 是否删除 必须是一个数字。" data-val-required="是否删除 字段是必需的。" id="IsDelete" name="IsDelete" type="text" value="0">
  1.  

MVC3 Model Binding验证方式的更多相关文章

  1. ASP.NET MVC3 Model验证总结 @Html.ValidationSummary(true)

    http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...

  2. ASP.NET MVC3 Model验证总结

    ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加 ...

  3. ASP.NET MVC3 Model验证总结(转)

    推荐:   ASP.NET MVC的Model元数据与Model模板:预定义模板 http://www.cnblogs.com/artech/archive/2012/05/02/model-meta ...

  4. 转:ASP.NET MVC3 Model验证总结

    http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...

  5. ASP.NET MVC3 Dynamically added form fields model binding

    Adding  new Item to a list of items, inline is a very nice feature you can provide to your user. Thi ...

  6. 理解ASP.NET Core - 模型绑定&验证(Model Binding and Validation)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 模型绑定 什么是模型绑定?简单说就是将HTTP请求参数绑定到程序方法入参上,该变量可以是简单类 ...

  7. Model的验证

    ModelValidator与ModelValidatorProvider ModelValidator public abstract class ModelValidator { public v ...

  8. asp.net mvc3 的数据验证(一)

    原文:asp.net mvc3 的数据验证(一)      对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略.asp.net mvc3框架使用的是叫做“ ...

  9. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

随机推荐

  1. jQuery中append、insertBefore、after与insertAfter方法注意事项

    这里列的是针对初学jQuery者来说容易搞不懂的部分,我在这里把这些方法列了个清单,希望大家能看的懂.如下: 方法 源包装集/字串 目标包装集体 特性描述 A.append(B) B A 若目标包装集 ...

  2. iOS 常用控件集合 完整项目

    [Swift]高仿 爱范儿3.0 http://www.code4app.com/forum.php?mod=viewthread&tid=10053&page=1&extra ...

  3. (转)RabbitMQ 集群与高可用配置

    集群概述 环境 配置步骤 集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务 ...

  4. git服务器简易搭建法

    受尽svn各种折磨的小伙伴都听说过git. 但是网上一搜索, 本来打算跟svn一样. 下一个服务器, 装下就可以开始用了. 没想到啊, 没想到. 居然需要Linux天赋点… 好吧, 拜鸟哥门下把Lin ...

  5. robots.txt用法

    主要作用是告诉蜘蛛爬虫该网站下哪些内容能抓取,哪些内容不能抓取.虽然可以没有robots.txt这个文件,默认就抓取该网站的所有文件,对搜索引擎爬虫没有任何的影响,但是如果你想控制蜘蛛的检索间隔,你就 ...

  6. django_auth_ldap

    使用django_auth_ldap来实现ldap和django自己的认证系统auth 下载插件 python-ldap和django_auth_ldap 配置settings.py 一些基本说明: ...

  7. 从new Function创建函数联想到MVC模式

    我们知道任何一个自定义函数都是Function构造器的实例,所以我们可以通过new Function的方式来创建函数,使用语法很简单, new Function(形参1, 形参2, ..., 形参N, ...

  8. Microsoft Access Database Engine 2010 Redistributable Download

    SQL Server 如需要导出类似Excel(*.xls.*.xlsx)格式的数据需要以来以下安装包 Microsoft Access 2010 数据库引擎可再发行程序包 此下载将安装一系列组件,帮 ...

  9. WebDev.WebServer40.exe已停止工作

    今天写程序的遇到这个错误 错误的原因是代码中有死循环

  10. Java 图形编程 一:入门

    package second; import java.awt.Color; import java.awt.Frame; import java.awt.event.WindowAdapter; i ...