为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用IValidatableObject?

如何使用IValidatableObject?

C#
繁华开满天机 2019-06-23 16:56:14
如何使用IValidatableObject?我明白IValidatableObject用于验证对象的方式,让我们彼此比较属性。我仍然希望有一些属性来验证单个属性,但是在某些情况下,我想忽略某些属性上的失败。我是否试图在下面的情况下不正确地使用它?如果不是,我如何实现这一点?public class ValidateMe : IValidatableObject{     [Required]     public bool Enable { get; set; }     [Range(1, 5)]     public int Prop1 { get; set; }     [Range(1, 5)]     public int Prop2 { get; set; }     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)     {         if (!this.Enable)         {             /* Return valid result here.              * I don't care if Prop1 and Prop2 are out of range              * if the whole object is not "enabled"              */         }         else         {             /* Check if Prop1 and Prop2 meet their range requirements here              * and return accordingly.              */          }     }}
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

在验证对象时,在Validator.ValidateObject中应用以下进程:

  1. 验证属性级属性
  2. 如果任何验证器无效,则中止返回失败的验证。

  3. 验证对象级别的属性。
  4. 如果任何验证器无效,则中止返回失败的验证。

  5. 如果桌面框架上的对象实现了IValidatableObject,那么调用它的验证方法并返回任何失败

这表明,您要做的工作不会成功,因为验证将在步骤2处中止。您可以尝试创建从内置属性继承的属性,并在执行正常验证之前(通过接口)专门检查是否存在启用的属性。或者,您可以将用于验证实体的所有逻辑放在Validate方法。


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 830 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信