-
-
Save LSTANCZYK/fd7358e1fe1dbdde080f70437965a772 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] | |
public class DateComparerAttribute : ValidationAttribute, IClientValidatable | |
{ | |
/// <summary> | |
/// If set will use DateTime.AddDays to specify the Min Valid Date | |
/// </summary> | |
public double MinDateAddDaysFromNow | |
{ | |
get { return _minDateAddDaysFromNow; } | |
set | |
{ | |
_minAddSet = true; | |
_minDateAddDaysFromNow = value; | |
} | |
} | |
/// <summary> | |
/// If set will use DateTime.AddDays to specify the Max Valid Date | |
/// </summary> | |
public double MaxDateAddDaysFromNow | |
{ | |
get { return _maxDateAddDaysFromNow; } | |
set | |
{ | |
_maxAddSet = true; | |
_maxDateAddDaysFromNow = value; | |
} | |
} | |
/// <summary> | |
/// If MinDateAddDaysFromNow is not set then this is used to JQuery select the Property that must be a date from the page | |
/// </summary> | |
public string MinDateSelector { get; set; } | |
/// <summary> | |
/// If MaxDateAddDaysFromNow is not set then this is used to JQuery select the Property that must be a date from the page | |
/// </summary> | |
public string MaxDateSelector { get; set; } | |
public override string FormatErrorMessage(string name) | |
{ | |
if (String.IsNullOrEmpty(ErrorMessage)) | |
{ | |
return "Date is invalid"; | |
} | |
else | |
{ | |
return ErrorMessage; | |
} | |
} | |
public DateTime? MinDate | |
{ | |
get | |
{ | |
if (String.IsNullOrEmpty(MinDateSelector)) | |
{ | |
return _minAddSet ? DateTime.Now.AddDays(MinDateAddDaysFromNow) : DateTime.Now.AddYears(-20); | |
} | |
return null; | |
} | |
} | |
public DateTime? MaxDate | |
{ | |
get | |
{ | |
if (String.IsNullOrEmpty(MaxDateSelector)) | |
{ | |
return _maxAddSet ? DateTime.Now.AddDays(MaxDateAddDaysFromNow) : DateTime.Now.AddYears(20); | |
} | |
return null; | |
} | |
} | |
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, | |
{ | |
return new[] | |
{ | |
new ModelClientValidationRangeDateRule(FormatErrorMessage(metadata.GetDisplayName()), MinDateSelector, MaxDateSelector, MinDate, MaxDate, metadata.IsNullableValueType) | |
}; | |
} | |
protected override ValidationResult IsValid(object value, ValidationContext validationContext) | |
{ | |
if (validationTrue) | |
{ | |
return ValidationResult.Success; | |
} | |
return new ValidationResult(FormatErrorMessage(string.Empty)); | |
} | |
} | |
public class ModelClientValidationRangeDateRule | |
: ModelClientValidationRule | |
{ | |
public ModelClientValidationRangeDateRule(string errorMessage, | |
string minDateSelector, string maxDateSelector, DateTime? minDate, DateTime? maxDate, bool IsNullableValueType) | |
{ | |
ErrorMessage = errorMessage; | |
ValidationType = "rangedate"; | |
ValidationParameters["minselector"] = minDateSelector; | |
ValidationParameters["maxselector"] = maxDateSelector; | |
ValidationParameters["mindate"] = minDate.HasValue ? minDate.Value.ToString("G") : ""; | |
ValidationParameters["maxdate"] = maxDate.HasValue ? maxDate.Value.ToString("G") : ""; | |
ValidationParameters["nullable"] = IsNullableValueType.ToString().ToLower(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment