Rob*_*ean 4 validation null enterprise-library
我试图想出一个可以为null的属性验证,比如int.
例
[RangeValidator(0, RangeBoundaryType.Inclusive, 1, RangeBoundaryType.Inclusive)]
int? Age { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,如果我设置Age为null验证失败,因为它不在范围内,我知道我也需要一个[ValidatorComposition(CompositionType.Or)],但我还应该使用什么呢?
虽然IgnoreNulls可以添加属性,但ValidationResults在返回验证结果时会导致复杂化.这是因为验证块隐式地将验证器包装成OrCompositeValidator- 属性可以为null或者它可以是指定范围内的整数.
验证失败时,顶级验证结果为OrCompositeValidator.要获得实际的RangeValidator验证结果,您现在需要深入NestedValidationResults查看ValidationResult对象的属性.
这似乎是处理验证结果消息的大量工作,所以在我看来必须有更好的方法.
这就是我做的.
IgnoreNullStringLengthValidator继承自StringLengthValidator(这里你会继承RangeValidator)的类.覆盖DoValidate方法并检查空值 - 在这里你会写:
if (!objectToValidate.HasValue) return;
Run Code Online (Sandbox Code Playgroud)base.DoValidate(...).IgnoreNullStringLengthValidatorAttribute,返回new IgnoreNullStringLengthValidator.在这里,您将创建一个IgnoreNullRangeValidatorAttribute类.得到的验证结果更符合您的预期,因为它不会隐式嵌套验证器.
您可以添加IgnoreNulls属性:
[IgnoreNulls()]
[RangeValidator(0, RangeBoundaryType.Inclusive, 1, RangeBoundaryType.Inclusive)]
int? Age { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3434 次 |
| 最近记录: |