基于元数据类中的属性的验证

时间:2010-11-06 08:05:17

标签: silverlight-4.0 wcf-ria-services

我正在根据metadata.cs文件中的属性执行验证。我正在使用Entity framework 4.0并使用wcf ria服务。我想知道在silverlight中asp.net中Page.IsValid的等价物是什么?在保存之前,如何确保实体处于正确状态?如果我不确保这个例外火灾看起来非常难看。我找到了一个名为entityName.ValidationErrorCount的属性,所以如果我的实体名为UserobjUser.ValidationErrorCount小于等于0我保存它。此方法的问题在于,如果用户未在任何文本框中输入值,则随后实体中的所有值都为空。因此ValidationErrorCount属性返回0,因为所有都是空值,因此我的程序尝试保存实体,但实际上实体处于不正确的状态,因此异常触发。我如何解决这个问题?

我希望我很清楚。如果没有,请告诉我。在此先感谢:)

1 个答案:

答案 0 :(得分:2)

您可以使用Validator类(来自System.ComponentModel.DataAnnotations)验证实体 如此命名空间(其中entity是对要验证的实体的引用):

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);

希望这会有所帮助......

克里斯