【问题标题】:Enterprise Library Validation Ruleset issue for nested objects嵌套对象的企业库验证规则集问题
【发布时间】:2013-03-08 09:58:07
【问题描述】:

在使用 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");

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

【问题讨论】:

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


    【解决方案1】:

    结果我需要在 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; }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多