要么具有或必须具有值,但两者不能同时为空

时间:2010-03-25 14:35:58

标签: validation enterprise-library

我有两个字段,我需要使用Microsoft Enterprise Library验证生成一个属性,以便任何一个或必须有一个值,但两者不能同时为null。

2 个答案:

答案 0 :(得分:1)

使用自定义验证器。

[HasSelfValidation]
public class ValidateMe {


    [SelfValidation]
    public void ValidateFieldNotNul(ValidationResults validationResults)
    {
       .. start psudo code
         if( xor)
             validationResults.AddResult( new ValidationResult("One must not be null",...));
    }

}

答案 1 :(得分:0)

验证应用程序块有PropertyComparisonValidator,可让您将一个属性与另一个属性进行比较。不幸的是,此验证程序仅允许ComparisonTypeEqual, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual,因此这实际上对您没有帮助。

我认为你有两个选择:

  • 自我验证
  • 自定义验证器

自我验证(由@Nix显示)可能是最简单的,但是需要在你有这个要求的每个场景中重新实现它(至少要把钩子调用一个常用的方法)。

创建custom validator会导致代码可以添加到配置中或直接在实体上归属,并且可以轻松重复使用。

自定义验证器肯定会更有效,但如果您需要重用(例如,可以在应用程序之间重复使用)或者更喜欢该设计,那么它可能是值得的。