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

本文关键字:规则集 问题 验证 企业库 对象 嵌套 | 更新日期: 2023-09-27 18:03:09

在使用enterprise Library验证时,当使用嵌套对象验证对象时,我在应用规则集时遇到问题。如果我有以下对象

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");
尽管我指定了Ruleset,但我总是得到与前一个验证调用相同的结果。有什么建议吗?

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

因此,我需要在ObjectValidator属性的构造函数中传递我的规则集,并指定规则集属性以获得我期望的行为。

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

基本上构造函数参数是目标对象("地址")中的目标规则集,而规则集命名参数是当前对象("人")上的规则集。