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] 标记此属性,并且该属性可以为空(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;
}

我认为如果您想要自定义验证器,您需要具体说明如何处理空值。这应该告诉验证器没有任何值是有效的。

希望这可以帮助!

于 2012-08-14T13:27:26.260 回答