MVC驗證04-自定義驗證規則、日期範圍驗證

Darren Ji發表於2014-03-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偵測到。

MVC驗證04-自定義驗證規則、日期範圍驗證展開

注意:
■ ValidationType = "dayrange"中的dayrange必須小寫,否則報錯。
■ ValidationType = "dayrange"最終成為html元素的一個屬性data-val-dayrange,從而能被jquery偵測辨別。
■ rule.ValidationParameters["min"]和rule.ValidationParameters["max"],min和max將作為引數供jquery擴充套件方法使用,當然也必須是小寫。

  把自定義驗證特性打到View model上

[DayRange(0, 7)]驗證當天到第七天之內的日期。

MVC驗證04-自定義驗證規則、日期範圍驗證展開

  擴充套件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-自定義驗證規則、日期範圍驗證展開

效果:

日期範圍驗證

相關文章