向MVC的Model中添加验证
来源:互联网 发布:安达渡嘉 知乎 编辑:程序博客网 时间:2024/06/08 06:32
ASP.NET MVC 的核心设计原则之一是DRY(Don’t Repeat Yourself)——”不要重复自己”。在Model中添加验证可以省去我们在服务器端对数据的进行的繁琐验证操作。用好验证特性可以使代码更简洁,易扩展,易维护。
向MVC的Model中添加验证特性:
MVC的服务端验证流程是这样的:
客户端请求—>Route解析—> model绑定—> 数据验证.
命名空间:using System.ComponentModel.DataAnnotations;
举个栗子:
public class Model{ public int ID { get; set; } [StringLength(60, MinimumLength = 3)] public string Name { get; set; } [Display(Name = "Registe Date")] [DataType(DataType.Date)] public DateTime Date { get; set; } [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")] [Required] [StringLength(30)] public string Genre { get; set; } [Range(1, 100)] [DataType(DataType.Currency)] public decimal Price { get; set; }}
验证特性种类:
[Required] : 必填项
[Required(ErrorMessage = "请输入姓名")]
[StringLength] : 限制字符串长度
[StringLength(MaximumLength = 10 , MinimumLength = 3,ErrorMessage = "字符长度在3~10之间")]
[Range] : 限制取值范围
[Range(0, 120, ErrorMessage = "取值范围在0~120之间")]
[RegularExpression] : 匹配符合某个正则表达式
[RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "请输入正确的Email")]
Compare :判等比较
[Compare("Pwd", ErrorMessage = "两次密码不一致")]
Remote : Ajax远程验证,返回值是bool类型 true表示验证通过
//ValideUser为行为Action,Validate为控制器Controller[Remote("ValideUser", "Validate", HttpMethod = "post", ErrorMessage = "用户名已存在")]public string UserName { get; set; } public IActionResult ValideUser() { if(//条件...) { return Json(true,JsonRequestBehavior.AllowGet); } else return Json(false,JsonRequestBehavior.AllowGet); }
OutputCache :设置页面缓存
//Duration单位:秒[OutputCache(Duration=20)] public IActionResult Index() { //......}
自定义正则验证特性
public class EmailValid : RegularExpressionAttribute { public EmailValid () :base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$") { } }
扩展验证特性
实现服务器+客户端验证:继承ValidationAttribute ,实现IClientValidatable 接口
public class CheckAttribute : ValidationAttribute ,IClientValidatable { //重写IsValid验证方法 public override bool IsValid(object value) { if (value == null) return false; if (value.GetType() != typeof(bool)) throw new InvalidOperationException("只能用于Bool属性"); return (bool)value; } //重写 FormatErrorMessage错误消息提示方法 public override string FormatErrorMessage(string name) { return name==null?"请仔细阅读相关协议":name; } //实现GetClientValidationRules方法 public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { yield return new ModelClientValidationRule { ErrorMessage = String.IsNullOrEmpty(ErrorMessage) ? FormatErrorMessage(metadata.DisplayName) : ErrorMessage, ValidationType = "checkfocus" }; } }
通过实现IClientValidatable接口,使程序在生成html代码时候,为相应的input添加上了额外的验证规则,但是这些规则在客户端上,还没有方法来启动验证。
添加JQuery代码://添加ValidationType <script type="text/javascript"> jQuery.validator.addMethod("checkfocus", function(value, element, param) { return element.checked; }); jQuery.validator.unobtrusive.adapters.addBool("checkfocus"); </script>
数据格式化特性
DisplayName:设定字段显示的名字
[DisplayName("User Name")]
DataType:用于视图引擎对数据进行格式化
[DataType(DataType.EmailAddress)] 邮箱[DataType(DataType.CreditCard)] 信用卡[DataType(DataType.Currency)] 货币[DataType(DataType.Date)] 日期[DataType(DataType.DateTime)] 日期时间[DataType(DataType.Html)] HTML文件[DataType(DataType.ImageUrl)] 图片的URL[DataType(DataType.MultilineText)] 多行文本[DataType(DataType.Password)] 密码值[DataType(DataType.PhoneNumber)] 电话号码值[DataType(DataType.PostalCode)] 邮政代码[DataType(DataType.Time)] 时间[DataType(DataType.Upload)] 文件上载数据类型[DataType(DataType.Url)] URL
- ReadOnly:指定该特性所绑定到的属性是只读属性
[ReadOnly(true)]
总结
扩展验证特性的使用:
1. 服务端创建验证属性类并继承ValidationAttribute, 实现服务端的验证。
2. 验证属性类实现IClientValidatable接口,为生成的input标签添加客户端验证规则,同时扩展客户端验证方法。
附加内容:模型绑定
MVC 包含几种与默认绑定源不同行为的 Attribute 。
[BindRequired]:表示如果这个绑定不能发生,将添加一个模型状态错误(Model State Error)。
[BindNever]:表示这个参数不进行绑定。
[FromServices]:表示使用 dependency injection 通过服务来绑定参数。
[FromBody]:从 HTTP 请求的 Body 中绑定数据。
- 向MVC的Model中添加验证
- mvc中 model的添加与更新
- asp.net mvc Model验证中MetadataType的应用
- asp.net + MVC中model验证
- MVC中如何使用Model验证
- MVC中Model的设计
- MVC 3.0 (Model 验证)
- MVC 3.0 验证Model
- MVC model验证
- mvc model数据验证
- MVC使用jQuery从视图向控制器传递Model,数据验证,MVC HTML辅助方法小结
- ASP.NET MVC中对Model进行分步验证的解决方法
- mvc中动态给一个Model类的属性设置验证
- Asp.net MVC中 model 验证方式 ajax +jquery
- .net mvc Model 验证总结
- MetadataType的使用,MVC的Model层数据验证
- [MVC] model类中Virtual的作用
- MVC中Model三层的概念
- ubuntu编译安装nginx
- 机器学习中的梯度下降的本质理解
- ChangeDetectorRef
- 使用线程进行App的自动下载安装(带进度显示)
- Windows 10 电脑在播放声音后突然增大的解决办法
- 向MVC的Model中添加验证
- Linux日常命令
- Sublime配置Python环境
- java 页面url传值中文乱码的解决方法
- Spring事件监听
- gitbook安装与使用之windows下搭建gitbook平台
- 区块链之比特币的私钥,公钥和地址是什么?
- 如何提高 Java 中锁的性能
- 远程控制软件