Я пытаюсь реализовать проверку на стороне клиента для пользовательского атрибута, но, похоже, он не работает.
ToleranciaSuperior не может быть больше или равно ToleranciaInferio. На стороне сервера проверка работает правильно, а на стороне клиента - нет. Чего мне не хватает?
public class Geometria
{
public int Id { get; set; }
public string Componente { get; set; }
[Required]
[Range(0, float.MaxValue)]
[Display(Name = "Tolerância Inferior")]
public float ToleranciaInferior { get; set; }
[Required]
[Range(0, float.MaxValue)]
[ToleranciaLessOrEqualThan("ToleranciaInferior", ErrorMessage = "Tolerância Superior tem de ser maior que a Tolerância Inferior")]
[Display(Name = "Tolerância Superior")]
public float ToleranciaSuperior { get; set; }
}
public class ToleranciaLessOrEqualThanAttribute : ValidationAttribute, IClientModelValidator
{
private readonly string _comparisonProperty;
public ToleranciaLessOrEqualThanAttribute(string comparisonProperty)
{
_comparisonProperty = comparisonProperty;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
ErrorMessage = ErrorMessageString;
var currentValue = (float)value;
var property = validationContext.ObjectType.GetProperty(_comparisonProperty);
if (property == null)
throw new ArgumentException("Property with this name not found");
var comparisonValue = (float)property.GetValue(validationContext.ObjectInstance);
if (currentValue <= comparisonValue)
return new ValidationResult(ErrorMessage);
return ValidationResult.Success;
}
public void AddValidation(ClientModelValidationContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
var error = FormatErrorMessage(context.ModelMetadata.GetDisplayName());
context.Attributes.Add("data-val", "true");
context.Attributes.Add("data-val-tolerancialessorequalthan", error);
}
}