Исключение пользовательского атрибута валидатора в DataAnnotations - PullRequest
1 голос
/ 27 августа 2010

Кто-нибудь видел это исключение раньше? У Google или Bing совсем немного результатов.

IsValid(object value) has not been implemented by this class.  
The preferred entry point is GetValidationResult() and classes should override 
IsValid(object value, ValidationContext context).

Вот пользовательский валидатор:

public class PriceAttribute : ValidationAttribute
    {
        public string Id { get; set; }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            //I think this definition for IsValid is in DataAnnotations 4.0
            return base.IsValid(value, validationContext);
        }

        public override bool IsValid(object value)
        {
            //This I think is the older definition. Not sure why it expects this
            return base.IsValid(value);
        }

    }

Спасибо!

1 Ответ

1 голос
/ 14 января 2011

Вы должны фактически обеспечить реализацию для одного из этих методов вместо вызова base.IsValid(value) или base.IsValid(value, validationContext).

public class PriceAttribute : ValidationAttribute
{
    public string Id { get; set; }

    public override bool IsValid(object value)
    {
        return Id == "120"; // <-- put your condition here
    }
}

Если значение можно проверить без проверки других значений контекста, вы можетепросто переопределить IsValid(object value).

...