asp.net mvc 3 在模型上运行验证

Posted

技术标签:

【中文标题】asp.net mvc 3 在模型上运行验证【英文标题】:asp.net mvc 3 run validations on a model 【发布时间】:2011-04-23 02:18:38 【问题描述】:

如何在模型上运行所有 DataAnnotation 验证?

我正在从代码构建模型实例,但我没有模型状态绑定或任何东西。我只想针对它运行所有验证...我正在使用 EF CodeFirst。

public class Category

    public int Id  get; set; 

    [Required]
    public string Name  get; set; 


cat = new Category();
if (cat.IsValid())  /* blah */  // i want something like this

我知道这可能是一个愚蠢的问题,但我似乎无法在任何地方找到答案..

【问题讨论】:

Unit Testing ASP.NET DataAnnotations validation的可能重复 【参考方案1】:

这类似于this question about unit testing data annotations。您可以添加类似这样的扩展方法:

public static class ValidationExtension 

    public static bool IsValid<T>(this T model) where T: class 
        var validationResults = new List<ValidationResult>();
        var validationContext = new ValidationContext(model, null, null);
        Validator.TryValidateObject(model, validationContext, validationResults, true);
        return validationResults.Count == 0;
    

【讨论】:

【参考方案2】:

本题题目包含 ASP.net MVC

请注意,Validator 类和 MVC 验证有细微的差别。

例如:

    DataAnnotations.Validator 不支持开箱即用的好友类。 可以将 MVC 配置为使用其他验证框架,例如 FluentValidation。

如果要运行 MVC 的验证并填充 ModelState,可以调用 TryValidateModelValidateModel

如果您不想填充 ModelState,请在控制器中使用此代码 sn-p。

 var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
 ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null);

【讨论】:

以上是关于asp.net mvc 3 在模型上运行验证的主要内容,如果未能解决你的问题,请参考以下文章

未验证 ASP.NET MVC5 模型

Asp.net MVC 数据注解与验证

客户端验证在带有 Bootstrap 的 ASP.NET MVC5 中不起作用

Asp.net MVC 设置验证日期格式在 Chrome 上失败

asp.net mvc 中模型验证如何处理数组呢?

在 Asp.Net MVC 中禁用模型验证