2

カスタムの DateRange 検証属性を持つモデルがあります

public class Step1ViewModel
{
    [DataType(DataType.Date)]
    [DateRange(ErrorMessage="Date must be between blabla")]
    public DateTime? BirthDate1 { get; set; }
}

このモデルを View で表示すると、 date を指定せずに送信しても、カスタム Validation Attribute からエラーが発生します。このプロパティに [Required] のタグを付けていませんでした。プロパティは null 可能です (DateTime?)。この振る舞いがわかりません。

エラーを発生させずに日付を指定できないようにしたいと思います。

カスタム検証属性は次のとおりです。

 public class DateRangeAttribute : ValidationAttribute
 {
        public DateTime FirstDateYears { get; set; }
        public DateTime SecondDateYears { get; set; }

        public DateRangeAttribute()
        {
            FirstDateYears = Convert.ToDateTime("1801-01-01");
            SecondDateYears = Convert.ToDateTime("2101-01-01");
        }

        public override bool IsValid(object value)
        {
            DateTime date = Convert.ToDateTime(value); // assuming it's in a parsable string format

            if (date > FirstDateYears && date < SecondDateYears)
                return true;

            return false;
        }
    }
4

1 に答える 1

2

これを試して:

public override bool IsValid(object value)
{
    if(value == null){
        return true;
    }
    DateTime date = Convert.ToDateTime(value); 

    if (date > FirstDateYears && date < SecondDateYears)
        return true;

    return false;
}

カスタムバリデーターが必要な場合は、null 値をどうするかについて具体的に説明する必要があると思います。これにより、有効な値がないことがバリデーターに通知されます。

お役に立てれば!

于 2012-08-14T13:27:26.260 に答える