日付のMVCモデル検証 質問する

日付のMVCモデル検証 質問する

MVC 5 には、日付の最小値と最大値を設定できるデフォルトの検証はありますか?

私のモデルでは日付の検証が必要です

    public class MyClass
    {               
        [Required(ErrorMessage="Start date and time cannot be empty")]
        //validate:Must be greater than current date
        [DataType(DataType.DateTime)]
        public DateTime StartDateTime { get; set; }

        [Required(ErrorMessage="End date and time cannot be empty")]
        //validate:must be greater than StartDate
        [DataType(DataType.DateTime)]
        public DateTime EndDateTime { get; set; }            
    }

Ps: これによるとASP.NET Webサイトただし、DateTime のバリデーターの使用には問題がありRange、推奨されません。

注: jQuery 検証は、Range 属性と DateTime では機能しません。たとえば、次のコードでは、日付が指定された範囲内であっても、常にクライアント側の検証エラーが表示されます。

[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]

JQUERY日付の検証を無効にして、範囲属性をDateTimeで使用する必要があります。そのため、範囲の属性とDateTimeを使用することは不可解です。

私はまた、次のようなナゲットパッケージがあることを知っています流暢な検証そして絶対確実これは、ある日付が他の日付より大きいかどうかを検証して確認するのには役立ちますが、デフォルトで日付の最小値と最大値を確認するものがあるかどうかを知りたいと思いました。

私が見たところMVC 5.1 の新機能、サポートがありますMaxLengthそしてMinLength検証。

ベストアンサー1

rangejQueryの日付の検証を無効にする必要はありません(他の問題を引き起こす可能性があります)$.validator

デフォルトでは数値で動作し(その後文字列比較にフォールバックします)、次のスクリプトを追加できます(およびの後jquery.validate.jsjquery.validate.unobtrusive.jsただし$(document).ready

$.validator.methods.range = function(value, element, param) {
    if ($(element).attr('data-val-date')) {
        var min = $(element).attr('data-val-range-min');
        var max = $(element).attr('data-val-range-max');
        var date = new Date(value).getTime();
        var minDate = new Date(min).getTime();
        var maxDate = new Date(max).getTime();
        return this.optional(element) || (date >= minDate && date <= maxDate);
    }
    // use the default method
    return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );
};

その後、RangeAttributeあなたの所有地で

[Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
public DateTime Date { get; set; }

おすすめ記事