2009-11-18 129 views
2

我一直對抗這個問題,我本來以爲可能是多態/繼承做影響了我的驗證,但香港專業教育學院也縮小到了這方面的工作......驗證應用程序塊的對象驗證不規則集

這裏是階級結構..

public class Employee { 

    [ObjectValidator(Ruleset = "A")] 
    public EmployeeName Name { get; set; } 

    public Employee() 
    { 
     Name = new EmployeeName(); 
    } 
} 

public class EmployeeName 
{ 
    [StringLengthValidator(1,20,Ruleset = "A")] 
    public string First { get; set; } 

    public string Last { get; set; } 

    public EmployeeName() 
    { 
     First = string.Empty; 
     Last = string.Empty; 
    } 
} 

測試:

[TestFixture] 
public class ObjectValidationWithRulesets 
{ 
    [Test] 
    public void wont_validate_with_a_ruleset() 
    { 
     var person = new Employee() 
     { 
      Name = new EmployeeName() 
      { 
       First = string.Empty, 
       Last = string.Empty 
      } 
     }; 

     var ruleSetValidator = 
      ValidationFactory.CreateValidator<Employee>("A"); 

     var validationResults = ruleSetValidator.Validate(person); 

     Assert.That(!validationResults.IsValid, 
      "Validation with rulsets failed"); 
    } 
} 

該測試通過,如果我刪除刪除規則集的東西。但是一旦應用了規則集,我就不能讓對象正確驗證。

任何人都可以對此有所瞭解嗎?

乾杯,

+0

確定。 因此,我一直在使用web.config文件中的驗證配置,事實證明,要使ObjectValidator使用規則集,它需要定義其targetRuleSet屬性。 有趣的是,這個字段不暴露在ObjectValidatorAttribute上。 這是設計嗎? – boz 2009-11-19 22:59:01

回答

2

我也有這個問題,但我並沒有在配置文件中定義targetRuleSet。我通過糾正我聲明ObjectValidator屬性的方式解決了這個問題。爲我工作的正確的語法如下

// Correct 
[ObjectValidator("RuleSetA", Ruleset = "RuleSetA")] 

在我的代碼錯誤地宣佈它如下

// Wrong syntax 
[ObjectValidator(Ruleset = "RuleSetA")] 
+0

Pradeeptp是對的。出於某種奇怪的原因,ObjectValidatorAttribute不在其DoCreateValidator方法中使用Ruleset屬性,而只使用通過targetRuleset構造函數參數設置的值。 – Steven 2010-08-31 08:25:47

+0

史蒂文,你能否確認你所編輯的內容是否正確?我可以看到您在原始示例中添加了「或//正確...」部分。 – pradeeptp 2010-09-09 13:31:16

+0

@pradeeptp,我不認爲這是正確的,實際上。我只是用規則集'[ObjectValidator(「RuleSetA」)]'嘗試過,並且失敗了。 – 2013-03-10 01:32:53