我有一个带有自定义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;
}
}
答案 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;
}
我认为如果你想要一个自定义验证器,你需要具体说明如何处理空值。这应该告诉验证者没有值是有效的。
希望这有帮助!