2011-04-26 119 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);