我正在尝试在控制器内验证ModelState上下文之外的模型对象,我目前有一个解析器,它从excel文件创建模型对象,我希望能够报告添加了多少条目数据库和失败的数量,有没有办法在模型绑定之外的数据注释上验证模型对象?
我正在寻找类似于model.valid?
的rails模型方法的东西,或者我自己实现它的方法。
我目前的解决方案只是手动检查是否存在一些关键字段,但这复制了我的模型类及其元数据之间的要求,必须有更好的方法来挂钩由mvc 2完成的模型验证检查。
由于
答案 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);