我使用CustomValidationAttribute修饰了一个类的属性,以验证是否设置了GUID值,但是当我尝试使用辅助方法 Validator.TryValidateObject()强制执行它时似乎它没有调用我的验证逻辑。
当装饰属性的值发生更改时,将触发验证逻辑,但我需要处理用户单击保存按钮而不填写必填字段的情况,因此需要强制验证属性在运行之前运行调用 DomainContext.SubmitChanges()。
有趣的是,即使继承自ValidationAtrribute的类也不会被Validator.TryValidateObject()运行。
强制执行验证属性的正确方法是什么?
答案 0 :(得分:1)
在属性级别应用的自定义验证器必须使用TryValidateProperty单独验证。
e.g。
Validator.TryValidateProperty(ViewModel.MyProperty,
new ValidationContext(ViewModel.MyProperty, null, null)
{ MemberName = "MyProperty" }, results);
答案 1 :(得分:1)
更简单的方法是将TryValidateObject()上的最后一个参数(validateAllProperties)设置为true。有关详细信息,请参阅msdn article。
List<ValidationResult> vr = new List<ValidationResult>();
ValidationContext vc = new ValidationContext(viewModel, null, null);
Validator.TryValidateObject(viewModel, vc, vr, true);