2011-04-26 67 views
0

我用CustomValidationAttribute装饰了一个类的属性来验证是否设置了GUID值,但是当我试图强制它通过使用帮助器方法执行时Validator.TryValidateObject()看起来它没有调用我的验证逻辑。Validator.TryValidateObject可以强制[CustomValidation]属性来验证属性吗?

当装饰属性的值发生变化时,触发验证逻辑,但我需要处理用户单击保存按钮而不填写必填字段的场景,因此需要强制验证属性在之前运行调用DomainContext.SubmitChanges()被调用。有趣的是,即使从ValidatorAtrribute继承的类也没有被Validator.TryValidateObject()运行。

什么是强制执行验证属性的正确方法?

回答

1

在属性级应用的自定义验证器必须通过TryValidateProperty单独进行验证。

例如

Validator.TryValidateProperty(ViewModel.MyProperty, 
       new ValidationContext(ViewModel.MyProperty, null, null) 
       { MemberName = "MyProperty" }, results); 
1

这样做的一个更简单的方法是设置的最后一个参数(validateAllProperties)上TryValidateObject()为true。请参阅msdn article了解更多信息。

List<ValidationResult> vr = new List<ValidationResult>(); 
ValidationContext vc = new ValidationContext(viewModel, null, null); 
Validator.TryValidateObject(viewModel, vc, vr, true);