c# - 自定义验证未执行

标签 c# c#-4.0 data-annotations

我在 WPF 应用程序中有一个 View 模型类,它具有一些非常复杂的验证。我已经实现了 IValidatableObject提供自定义验证逻辑的接口(interface)。问题是我的 IEnumerable<ValidationResult> Validate(ValidationContext validationContext)永远不会被调用!

这是尝试验证的代码: Validator.TryValidateObject(RMA, new ValidationContext(RMA, null, null), result);

关于为什么 Validator 的任何想法对象没有调用我的自定义验证代码?

最佳答案

问题是我在自定义类中的一个字段上设置了[Required] 并且Validator 将不会执行自定义验证,直到所有数据注释验证已经完成。删除 [Required] 允许执行自定义验证。

编辑:

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

  1. 验证属性级属性
  2. 如果任何验证器无效,则中止验证并返回失败
  3. 验证对象级属性
  4. 如果任何验证器无效,则中止验证并返回失败
  5. 如果在桌面框架上并且对象实现了IValidatableObject,则调用它的Validate方法并返回任何失败

http://jeffhandley.com/archive/2009/10/16/validator.aspx

验证将在第 2 步中止。

关于c# - 自定义验证未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149899/

相关文章:

c# - 从模型中获取数据注释属性

c# - Sitecore.Logging RollingFileAppender 缺失 [lockingModel]

c# - 反对字符串,反之亦然

c# - 使用新文件更新文件

c# - 我可以将 .NET app.config 文件驻留在应用程序目录之外吗

asp.net-mvc-3 - ASP.Net MVC 3 - 使用 DataAnnotations 的不显眼的客户端验证 - 字段是必需的,但不应该是

.net - “System.ComponentModel.DataAnnotations.dll”可用于 Android 和 iOS 吗?

c# - RadGridView检测CellClick事件按钮

c# - 听取使用 IEnumerable<T> 时用于 BlockingCollection 的 Queue.Peek() 的模拟

c# - 如何错误处理C#中的过点击