protected override ValidationResult IsValid(object value, ValidationContext validationContext) { DateTime currentDateTime; if (DateTime.TryParse(value.ToString(), out currentDateTime)) { if (Mode == DateValidatorMode.OverOrEqualToProperty) { DateTime refPropertyDate; Object instance = validationContext.ObjectInstance; Type type = instance.GetType(); Object data = type.GetProperty(this.RefProperty).GetValue(instance, null); if (data != null && data is DateTime) { refPropertyDate = (DateTime)data; } else { return(new ValidationResult("Property reference date is null or not DateTime value")); } if (DateTime.Compare(currentDateTime, refPropertyDate) >= 0) { return(ValidationResult.Success); } else { return(new ValidationResult("Current DateTime is lower than min property")); } } else if (Mode == DateValidatorMode.OverNow) { DateTime minDateTime; if (MinDate.Equals("Now")) { minDateTime = DateTime.Now; } else { DateTime dt; if (!DateTime.TryParse(MinDate, out dt)) { return(new ValidationResult("Cannot parse reference min date to date")); } else { minDateTime = dt; } } if (DateTime.Compare(currentDateTime, minDateTime.Date) >= 0) { return(ValidationResult.Success); } else { return(new ValidationResult("Current DateTime is lower than Now or min DateTime")); } } } else { return(new ValidationResult("Cannot parse to date")); } return(new ValidationResult("Error")); }