代码之家  ›  专栏  ›  技术社区  ›  Coppermill

或者必须有一个值,但两者不能同时为空

  •  0
  • Coppermill  · 技术社区  · 15 年前

    我有两个字段,需要使用Microsoft企业库验证生成一个属性,以便或者必须有一个值,但两者不能同时为空。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Nix    15 年前

    使用自定义验证器。

    [HasSelfValidation]
    public class ValidateMe {
    
    
        [SelfValidation]
        public void ValidateFieldNotNul(ValidationResults validationResults)
        {
           .. start psudo code
             if( xor)
                 validationResults.AddResult( new ValidationResult("One must not be null",...));
        }
    
    }
    
        2
  •  0
  •   Randy Levy    15 年前

    验证应用程序块具有 PropertyComparisonValidator 它可以让您将一个属性与另一个属性进行比较。不幸的是,这个验证器只允许 ComparisonType 的: Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual 所以这实际上对你没有帮助。

    我认为你有两个选择:

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

    自我验证(由@nix显示)可能是最简单的,但需要对您有此要求的每个场景(至少要放置钩子来调用公共方法)重新实现它。

    创建 custom validator 将导致代码可以添加到配置中,或者直接归属于实体,并且可以很容易地重用。

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