我想写一个DateTime的自定义ValidationAttribute?MVC3 ValidationAttribute for DateTime?返回DateTime.Max在IsValid(...)
然而,当它击中IsValid(object value)
值已经DateTime.Max
什么我可以在我的代码中看到已将此值设置,但它意味着我在努力对其进行验证。
我想要的规则是“空或今日之后” - 这意味着如果有一个空值,那么它很好,但如果有一个值,那么我想验证。
public class AfterTodayAttribute : ValidationAttribute, IClientValidatable
{
public AfterTodayAttribute()
{
}
//Tried this as well...same result
//protected override ValidationResult IsValid(object value, ValidationContext validationContext)
//{
// return base.IsValid(value, validationContext);
//}
public override bool IsValid(object value)
{
//value is already a DateTime and set to DateTime.Max
var valid = false; // for testing only
return valid;
}
}
...
[Display(Description = "Expiry Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
[AfterToday(false, ErrorMessage = "The Limit Expiry Date must be later than Today")]
public DateTime? NewExpiryDate { get; set; }
...
为什么加-1秒? – AgentFire
这将确保dt在今天之后而不是明天00:00。如果你没有减少日期,那么你应该使用这个(大于或等于):dt.Value> = DateTime.Today.AddDays(1) –
@PeterKiss但如果偶数dt2比dt1晚一秒,则运算符将返回true。 –