DooDoo
DooDoo

Reputation: 13437

Validate Using Data Annotation

Based On this Article: Manual Validation with Data Annotations

I write this code:

public class Person04
{
    [CustomValidation(typeof(AWValidation), "ValidateSalesAmount")]
    public int SalesAmout { get; set; }

    [DataType(DataType.EmailAddress, ErrorMessage = "Invalid E-mail")]
    public string EmailAddress { get; set; }

    [Range(0, 99, ErrorMessage = "Age should be in range 0 to 99")]
    public int Age { get; set; }

    [Required(ErrorMessage="Name is required")]
    public string Name { get; set; }

    [StringLength(10, ErrorMessage = "Invalid Last Name")]
    public string LastName { get; set; }
}

public class AWValidation
{
    public static ValidationResult ValidateSalesAmount(int salesAmount)
    {
        if (salesAmount < 0)
        {
            return new ValidationResult("Invalid Sales Amount");
        }

        return ValidationResult.Success;
    }
}

and

 var person = new Person04() { SalesAmout = -1, Age = 100, EmailAddress = "nima", LastName = "Arian The Great" };
 var context = new ValidationContext(person, serviceProvider: null, items: null);
 var results = new List<ValidationResult>();

 var isValid = Validator.TryValidateObject(person, context, results);

 if (!isValid)
 {
     foreach (var validationResult in results)
     {
         Console.WriteLine(validationResult.ErrorMessage);
     }
 }

but this Code just write 1 error:

Name is required

Why other errors not specified?

thanks

Upvotes: 5

Views: 10302

Answers (2)

Mahavir Kumbharvadia
Mahavir Kumbharvadia

Reputation: 98

I think i found solution.You just missed an object of class ValidationContext.

          public class AWValidation
            {
                    public static ValidationResult ValidateSalesAmount(int salesAmount,ValidationContext validationContext)
                     {
                       if (salesAmount < 0)
                          {
                           return new ValidationResult("Invalid Sales Amount");
                          }

                      return ValidationResult.Success;
                     }
           }

Upvotes: -1

Darin Dimitrov
Darin Dimitrov

Reputation: 1038720

var isValid = Validator.TryValidateObject(person, context, results, true);

You were missing the last boolean parameter which indicates that you want all properties to be validated:

validateAllProperties: true to validate all properties; if false, only required attributes are validated.

Upvotes: 10

Related Questions