ASP.NET MVC 2模型对象验证

时间:2011-01-10 15:14:14

标签: asp.net-mvc-2 validation

我正在尝试在控制器内验证ModelState上下文之外的模型对象,我目前有一个解析器,它从excel文件创建模型对象,我希望能够报告添加了多少条目数据库和失败的数量,有没有办法在模型绑定之外的数据注释上验证模型对象?

我正在寻找类似于model.valid?的rails模型方法的东西,或者我自己实现它的方法。

我目前的解决方案只是手动检查是否存在一些关键字段,但这复制了我的模型类及其元数据之间的要求,必须有更好的方法来挂钩由mvc 2完成的模型验证检查。

由于

1 个答案:

答案 0 :(得分:2)

您必须使用Validator类,该类可以作为DataAnnotations的一部分找到。

User userEntity = new User();

var validationContext = new ValidationContext(userEntity, null, null);
var validationResults = new List<ValidationResult>();
DataAnnotations.Validator.TryValidateObject(userEntity, validationContext, validationResults, true);

如果您的所有实体或应用程序/域模型类都继承自同一个类,您可以将此代码放在父类中或作为扩展方法来保持您的类清洁。

否则,您将使用单例模式创建一个特殊的静态验证器。您可以根据自己的喜好使用验证结果。

元数据类

如果您使用元数据类来定义实体的验证规则,则应在验证之前注册元数据类:

TypeDescriptor.AddProviderTransparent(
    new AssociatedMetadataTypeTypeDescriptionProvider(
        typeof(User),
        typeof(UserMetadata)
    ),
    typeof(User)
);

Validator.TryValidateObject(userEntity, context, results, true);