【问题标题】:ASP.NET MVC 2 Model object validationASP.NET MVC 2 模型对象验证
【发布时间】:2011-01-10 15:14:14
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: asp.net-mvc-2 validation


    【解决方案1】:

    您必须使用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);
    

    【讨论】:

    • 这看起来很有希望,但它会从我的实体的元数据类中读取验证规则吗?我使用它的简单测试忽略了字段上的正则表达式验证等内容
    • 我猜你要测试一下。由于它是数据注释本机验证器,我想它遵循元数据类验证定义。但是你应该测试它。其他规则呢?只有正则表达式规则不起作用吗?
    • 是的,我试过了,这就是我评论的原因,不知道它是否设计为在验证时从元数据中读取,或者我做错了什么,我得到的错误是即使您更新了答案,也不会因缺少必填字段或未通过正则表达式验证的字段而引发错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多