【问题标题】:Enterprise library Validation block and rulesets企业库验证块和规则集
【发布时间】:2011-02-04 11:02:54
【问题描述】:

我在一个看起来像这样的类型上使用规则集:

public class Salary
{

   public decimal HourlyRate { get; set; }

   [ValidHours]  //Custom validator
   public int NumHours { get; set; }

   [VerifyValidState(Ruleset="State")]  //Custom validator with ruleset
   public string State { get; set; }
}

由于业务需求,我需要先验证规则集“状态”,然后验证整个业务实体

public void Save()
{
   ValidationResults results = Validation.Validate(salary, "State");

   //Check for validity

   //Now run the validation for ALL rules including State ruleset
   ValidationResults results2 = Validation.Validate(salary); //Does not run the ruleset marked with "State"

}

我如何完成我想做的事情?

【问题讨论】:

    标签: c# .net validation enterprise-library


    【解决方案1】:

    您需要将VerifyValidState 添加到两个规则集:

    public class Salary
    {
    
       public decimal HourlyRate { get; set; }
    
       [ValidHours]  //Custom validator
       public int NumHours { get; set; }
    
       [VerifyValidState]  
       [VerifyValidState(Ruleset="State")]  //Custom validator with ruleset
       public string State { get; set; }
    }
    

    然后您可以单独调用每个 RuleSet(您已经在这样做了)。代码如下所示:

    public void Save()
    {
        ValidationResults results = Validation.Validate(salary, "State");
    
        //Check for validity
        if (results.IsValid)
        {    
            //Now run the validation for ALL rules including State ruleset
            results.AddAllResults(Validation.Validate(salary)); 
        }    
    }
    

    【讨论】:

    • @Tuzo - 非常好。我会试试的。我有一个快速无关的问题。如果我的验证规则分布在配置文件和属性中,我知道我可以使用 IConfigurationSource 从配置文件中读取规则。但是,我可以将它们与指定为类型属性的规则结合起来吗?我可以在 SO 上为此创建一个单独的问题。
    • @Tuzo - 另外,我想我可以通过执行这样的操作向属性添加多个规则集? [VerifyValidState(Ruleset="State")] [VerifyValidState()] [VerifyValidState(Ruleset="SomeOtherRuleset")] public string State { get;放; }
    • @user102533 - 是的,您可以将多个规则集添加到属性中。
    • @user102533 - 您可以使用由属性指定的规则以及通过配置为同一 RuleSet 指定的规则。 EL 将运行 RuleSet 的所有规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多