2010-11-06 70 views
0

我正在根據metadata.cs文件中的屬性執行驗證。我正在使用實體框架4.0並使用wcf ria服務。我想知道Silverlight中的asp.net中Page.IsValid的等效物是什麼?如何在保存之前確保實體處於正確狀態?如果我不確定這是一個看起來非常難看的例外情況。我發現一個名爲entityName.ValidationErrorCount的屬性,所以如果我的實體被命名爲User我確實objUser.ValidationErrorCount小於等於0我保存它。這種方法的問題在於,如果用戶沒有在任何文本框中輸入值,則隨後該實體中的所有值都爲空。所以ValidationErrorCount屬性返回0,因爲所有的值都是空值,因此我的程序試圖保存實體,但實際上實體處於不正確的狀態,所以異常會觸發。我如何克服這個問題?根據元數據類中的屬性進行驗證

我希望我很清楚。如果沒有,請讓我知道。感謝提前:)

回答

2

可以使用Validator類(從System.ComponentModel.DataAnnotations 命名空間)驗證一個實體,像這樣(其中實體是對實體的引用進行驗證):

List<ValidationResult> validationResults = new List<ValidationResult>(); 
ValidationContext validationContext = new ValidationContext(entity, null, null); 
bool isValid = Validator.TryValidateObject(entity, validationContext, validationResults, true); 

或者,您是否使用DataForm控件?如果是這樣,通過調用DataForm上的ValidateItem()方法,可以更輕鬆地檢查當前項是否有效。這將返回一個布爾值,指示當前項目是否有效(您也可以檢查DataForm的IsItemValid屬性)。它還會更新綁定控件以顯示其驗證狀態。如果你不使用DataForm,那麼它肯定會讓你更容易。否則,只需將驗證結果添加到實體的財產ValidationErrors:

foreach (ValidationResult result in validationResults) 
    entity.ValidationErrors.Add(result); 

希望這有助於...

克里斯

+0

感謝克里斯,它驗證了空值太:) – TCM 2010-11-06 18:37:33

+0

- 它工作正常但你得到的動畫沒有顯示出來。我們能糾正它嗎?該錯誤甚至不會在驗證摘要中顯示。但是數據正確驗證。 – TCM 2010-11-07 03:58:51

+0

嗨Ankit。已經更新了我的答案。希望它有幫助... – 2010-11-07 17:34:46