protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // Get values var comparableValue = value as IComparable; IComparable comparableOtherValue; try { comparableOtherValue = validationContext.GetPropertyValue<IComparable>(this.OtherPropertyName); } catch (ArgumentException aex) { throw new InvalidOperationException("Other property not found", aex); } // Empty or noncomparable values are valid - let others validate that if (comparableValue == null || comparableOtherValue == null) return ValidationResult.Success; var compareResult = comparableValue.CompareTo(comparableOtherValue); if (compareResult == 1 || (this.AllowEqual && compareResult == 0)) { // This property is greater than other property or equal when permitted return ValidationResult.Success; } else { // This property is smaller or equal to the other property if (string.IsNullOrWhiteSpace(this.OtherPropertyDisplayName)) { this.OtherPropertyDisplayName = validationContext.GetPropertyDisplayName(this.OtherPropertyName); } return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); } }
public static bool IsCompareToType(this ValidationContext validationContext, object value, string compareToPropertyName, IComparableExtensions.CompareToType compareToType) { var thisValue = value.As <object, IComparable>(); var otherValue = validationContext.GetPropertyValue(compareToPropertyName).As <object, IComparable>(); return(thisValue.IsCompareToType(otherValue, compareToType)); }
public static int CompareToProperty(this ValidationContext validationContext, object value, string compareToPropertyName) { var currentValue = value.As <object, IComparable>(); var comparisonValue = validationContext.GetPropertyValue(compareToPropertyName).As <object, IComparable>(); if (!ReferenceEquals(value.GetType(), comparisonValue.GetType())) { throw new ArgumentException("The properties types must be the same"); } return(currentValue.CompareTo(comparisonValue)); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // Always succeed on empty value if (value == null) return ValidationResult.Success; // Get other property value var currentOtherValue = validationContext.GetPropertyValue(this.OtherPropertyName); // Compare to it if (object.Equals(this.OtherPropertyValue, currentOtherValue) == this.NegateCondition) return ValidationResult.Success; // Return error return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var comparableValue = value as IComparable; var comparableOtherValue = validationContext.GetPropertyValue<IComparable>(this.OtherPropertyName); // Empty or noncomparable values are valid - let others validate that if (comparableValue == null || comparableOtherValue == null) return ValidationResult.Success; var compareResult = comparableValue.CompareTo(comparableOtherValue); if (compareResult == 1 || (this.AllowEqual && compareResult == 0)) { // This property is greater than other property or equal when permitted return ValidationResult.Success; } else { // This property is smaller or equal to the other property if (string.IsNullOrWhiteSpace(this.OtherPropertyDisplayName)) this.OtherPropertyDisplayName = this.OtherPropertyName; return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); } }