MVC验证04-自定义验证规则、日期范围验证

原文:MVC验证04-自定义验证规则、日期范围验证

本文体验范围验证。与本文相关的包括:

MVC验证01-基础、远程验证  
MVC验证02-自定义验证规则、邮件验证  
MVC验证03-自定义验证规则、禁止输入某些值  

 

当需要对字符串长度进行验证,可以用StringLength:
[StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]

当需要对数组范围进行验证,可以用Range:
[Range(0,5)]

如果需要对日期范围进行验证呢?
假设来验证日期,以当前日期为基准,介于当前日期和第七天之间的日期为有效,其它无效。

  自定义验证特性,继承 ValidationAttribute 并实现IClientValidatable

重写基类ValidationAttribute的IsValid()方法,是为了服务端验证用的。
实现IClientValidatable接口方法,是为了在前端html元素增加某个属性,好让jquery侦测到。

展开

注意:
■ ValidationType = "dayrange"中的dayrange必须小写,否则报错。
■ ValidationType = "dayrange"最终成为html元素的一个属性data-val-dayrange,从而能被jquery侦测辨别。
■ rule.ValidationParameters["min"]和rule.ValidationParameters["max"],min和max将作为参数供jquery扩展方法使用,当然也必须是小写。

  把自定义验证特性打到View model上

[DayRange(0, 7)]验证当天到第七天之内的日期。

展开

  扩展jquery验证jQuery.validator.dayrange.js

//扩展jquery验证方法
//第一个参数是前端输入的值
//第二个参数是html元素
//第三个参数是自定义验证特性DayRangeArribute中rule.ValidationParameters["min"]和rule.ValidationParameters["max"]的键值
jQuery.validator.addMethod(‘dayrange‘, function(value, element, param) {
    if (!value) {
        return false;
    }
    //value:1999/1/1
    var valueDateParts = value.split(‘-‘);
    var minDate = new Date();
    var maxDate = new Date();
    var now = new Date();
    var dateValue = new Date(valueDateParts[2],
                        (valueDateParts[1] - 1),
                         valueDateParts[0],
                         now.getHours(),
                         now.getMinutes(),
                         (now.getSeconds() + 5));
 
    minDate.setDate(minDate.getDate() - parseInt(param.min));
    maxDate.setDate(maxDate.getDate() + parseInt(param.max));
 
    return dateValue >= minDate && dateValue <= maxDate;
});
 
//第一个参数是jquery验证扩展方法名
//第二和第三个参数分别是最小或最大值
//第三个参数为DayRangeAttribute中ValidationType对应的值
jQuery.validator.unobtrusive.adapters.addMinMax(‘dayrange‘, ‘min‘, ‘max‘, ‘dayrange‘);

 

  Register.cshtml视图

展开

效果:

MVC验证04-自定义验证规则、日期范围验证,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。