2016-01-09 40 views
1

在此基礎上一篇文章:Manual Validation with Data Annotations驗證使用數據標註

我寫這篇文章的代碼:

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; 
    } 
} 

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); 
    } 
} 

但是這個代碼只寫1個錯誤:

Name is required

爲什麼oth呃錯誤沒有指定?

感謝

回答

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

你失蹤這表明你希望所有的屬性要驗證的最後一個布爾參數:

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

0

我想我找到solution.You剛剛錯過類的對象ValidationContext。

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

         return ValidationResult.Success; 
        } 
      }