未提供强制数据时的验证错误

时间:2012-08-14 13:22:53

标签: asp.net-mvc-3

我有一个带有自定义DateRange验证属性的模型

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

当我使用View显示此模型时,即使我提交时没有提供日期,也会从自定义验证属性中引发错误。我没有使用[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;
        }
    }

1 个答案:

答案 0 :(得分: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;
}

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

希望这有帮助!