2013-03-08 74 views
0

我在使用Enterpirse庫驗證驗證具有嵌套對象的對象時應用規則集時遇到問題。如果我有以下對象嵌套對象的企業庫驗證規則集問題

public class Person 
{ 
    [ObjectValidator] 
    [ObjectValidator(Ruleset = "A")] 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}")] 
    public string Address1 { get; set; } 

    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}", Ruleset = "A")] 
    public string Address2 { get; set; } 
} 

現在,如果我嘗試致電

ValidationResults results = Validation.Validate(myPersonObject); 

我得到我的默認驗證預期,即驗證對象,如果Person.Address.Address1太長它觸發但Person.Address.Address2被忽略,這是預期的。

但是,如果我嘗試調用我的驗證規則集爲「A」如下

ValidationResults results = Validation.Validate(myPersonObject, "A"); 

我總是得到相同的結果與前一次調用validate儘管我已指定規則集的事實。 有什麼建議嗎?

回答

0

因此事實證明,我需要在ObjectValidator屬性的構造函數中傳遞我的規則集以及指定Ruleset屬性以獲得預期的行爲。

public class Person 
{ 
    [ObjectValidator] 
    [ObjectValidator("A", Ruleset = "A")] 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}")] 
    public string Address1 { get; set; } 

    [StringLengthValidator(0, 32, MessageTemplate = "Invalid value '{0}' for {1}, Max length:{5}", Ruleset = "A")] 
    public string Address2 { get; set; } 
} 

基本上構造函數的參數是目標對象(「地址」)的目標規則集,而命名參數的規則集是什麼規則集被稱爲當前對象(「人」)上。