2016-02-25 214 views
1

我有一個對象,可以這樣說:範圍驗證屬性沒有驗證

public class Person{ 
    [Range(1, 100)] 
    public int Id {get;set;} 

    [Required] 
    public string Name {get;set;} 
} 

正如你可以看到Id應該ATLEAST包含1和需要的名稱字段。

我有這個驗證方法:

private static void ValidateObject(Person obj){ 
    var context = new ValidationContext(obj, serviceProvider: null, items: null); 
    var results = new List<ValidationResult>(); 

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

    if (!isValid) 
    { 
     throw new InvalidOperationException(results.First().ErrorMessage); 
    }   
} 

如果我離開了Name空,它會拋出一個錯誤。正確! 如果我將Id設置爲0,它不會拋出錯誤。這是我無法弄清楚的。變量isValid也是如此(應該是假的)

我在做什麼錯?

+0

您使用的是什麼應用程序類型? MVC,WPF? –

+0

這只是一個對象和調用驗證的類中的方法。沒有什麼花哨。沒有MVC,WPF,ASP或其他,只是一個類庫 –

回答

1

嘗試使用名爲「validateAllProperties」的額外參數調用Validator.TryValidateObject並將其設置爲true。如果您省略或將其設置爲false(默認),則不會驗證不需要的屬性。

private static void ValidateObject(Person obj){ 
    var context = new ValidationContext(obj, serviceProvider: null, items: null); 
    var results = new List<ValidationResult>(); 

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

    if (!isValid) 
    { 
     throw new InvalidOperationException(results.First().ErrorMessage); 
    }   
} 
+2

是的,這工作...非常感謝!讓我的一天:) –

+1

不錯的工作赫爾曼,我完全錯過了! – Ageonix