嵌套对象的企业库验证规则集问题

时间:2013-03-08 09:58:07

标签: c# validation enterprise-library enterprise-library-5

使用Enterpirse Library验证时,在使用嵌套对象验证对象时,我在应用Rulesets时遇到问题。如果我有以下对象

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

尽管我已经指定了规则集,但我总是得到与之前的验证调用相同的结果。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

事实证明,我需要在ObjectValidator属性的构造函数中传递我的Ruleset,并指定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; }
}

基本上构造函数参数是目标对象(“地址”)中的目标规则集,而规则集命名参数是在当前对象(“Person”)上调用规则集的内容。