2010-11-06 50 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

相关问题