当前位置:  开发笔记 > 编程语言 > 正文

企业库验证块 - 验证可空属性?

如何解决《企业库验证块-验证可空属性?》经验,为你挑选了2个好方法。

我试图想出一个可以为null的属性验证,比如int.

[RangeValidator(0, RangeBoundaryType.Inclusive, 1, RangeBoundaryType.Inclusive)]
int? Age { get; set; }

但是,如果我设置Age为null验证失败,因为它不在范围内,我知道我也需要一个[ValidatorComposition(CompositionType.Or)],但我还应该使用什么呢?



1> Philippe..:

虽然IgnoreNulls可以添加属性,但ValidationResults在返回验证结果时会导致复杂化.这是因为验证块隐式地将验证器包装成OrCompositeValidator- 属性可以为null或者它可以是指定范围内的整数.

验证失败时,顶级验证结果为OrCompositeValidator.要获得实际的RangeValidator验证结果,您现在需要深入NestedValidationResults查看ValidationResult对象的属性.

这似乎是处理验证结果消息的大量工作,所以在我看来必须有更好的方法.

这就是我做的.

    我创建了一个名为的IgnoreNullStringLengthValidator继承自StringLengthValidator(这里你会继承RangeValidator)的类.

    创建支持基本构造函数所需的所有构造函数.

    覆盖DoValidate方法并检查空值 - 在这里你会写:

    if (!objectToValidate.HasValue) return;
    

    确保下一行代码调用base.DoValidate(...).

    创建一个名为的属性类IgnoreNullStringLengthValidatorAttribute,返回new IgnoreNullStringLengthValidator.在这里,您将创建一个IgnoreNullRangeValidatorAttribute类.

得到的验证结果更符合您的预期,因为它不会隐式嵌套验证器.



2> Steven Robbi..:

您可以添加IgnoreNulls属性:

[IgnoreNulls()]
[RangeValidator(0, RangeBoundaryType.Inclusive, 1, RangeBoundaryType.Inclusive)]
int? Age { get; set; }

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有