2009-11-18 8 views
2

Ive été aux prises avec ce problème que je pensé à l'origine peut avoir été à voir avec polymorphisme/héritage affectant ma validation mais ive réduit à cette ...objet bloc d'application validation validateur ne fonctionne pas avec rulesets

est ici le structure de classe ..

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

le test:

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

Ce test passe si je retire retirer les choses Ruleset. Mais une fois que le jeu de règles est appliqué, je ne peux pas obtenir l'objet pour valider correctement.

Quelqu'un peut-il nous éclairer à ce sujet?

Cheers,

+0

Ok. Depuis que la configuration de validation du fichier web.config est en cours de lecture, il s'avère que pour qu'un ObjectValidator fonctionne avec un ensemble de règles, son attribut targetRuleSet doit être défini. Ce qui est intéressant est ce champ mais n'est pas exposé sur l'ObjectValidatorAttribute. Est-ce intentionnellement? – boz

Répondre

2

moi aussi eu ce problème, mais je ne définissaient pas targetRuleSet dans le fichier de configuration. J'ai corrigé le problème en corrigeant la façon dont je déclarais l'attribut ObjectValidator. La syntaxe correcte qui a fonctionné pour moi est la suivante

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

Dans mon code, je l'avais tort déclaré comme suit

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

Pradeeptp a raison. Pour une raison étrange, 'ObjectValidatorAttribute' n'utilise pas la propriété' Ruleset' dans sa méthode 'DoCreateValidator', mais seulement la valeur qui a été définie via l'argument constructeur' targetRuleset'. – Steven

+0

Steven, pourriez-vous s'il vous plaît confirmer ce que vous avez édité est correct? Je peux voir que vous avez ajouté la section "ou // corriger ..." dans mon exemple original. – pradeeptp

+0

@pradeeptp, je ne pense pas que ce soit correct, en fait. Je l'ai juste essayé avec juste le jeu de règles '[ObjectValidator (" RuleSetA ")]' et il a échoué. –

Questions connexes