Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation asp.net mvc 3在模型上运行验证_Validation_Asp.net Mvc 3_Model_Data Annotations_Code First - Fatal编程技术网

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

Validation asp.net mvc 3在模型上运行验证,validation,asp.net-mvc-3,model,data-annotations,code-first,Validation,Asp.net Mvc 3,Model,Data Annotations,Code First,如何在模型上运行所有DataAnnotation验证 我正在从代码构建一个模型实例,没有modelstate绑定或任何东西。我只想对它运行所有的验证。。。我正在使用EF CodeFirst public class Category { public int Id { get; set; } [Required] public string Name { get; set; } } cat = new Category(); if (cat.IsValid()) {

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

我正在从代码构建一个模型实例,没有modelstate绑定或任何东西。我只想对它运行所有的验证。。。我正在使用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
我知道这可能是个愚蠢的问题,但我似乎在任何地方都找不到答案。

这类似于。您可以添加类似以下内容的扩展方法:

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;
    }
}
公共静态类ValidationExtension{
公共静态bool是有效的(这个T模型),其中T:class{
var validationResults=新列表();
var validationContext=新的validationContext(model,null,null);
TryValidateObject(模型、validationContext、validationResults、true);
返回validationResults.Count==0;
}
}
此问题的标题包括ASP.net MVC

请注意,Validator类和MVCs验证有细微的区别

例如:

  • DataAnnotations.Validator不支持buddy类开箱即用
  • MVC可以配置为使用另一个验证框架,例如FluentValidation
  • 如果要运行MVC的验证并填充ModelState,可以调用TryValidateModel或ValidateModel

    如果不想填充ModelState,请在控制器中使用此代码段

     var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
     ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null);
    
    可能重复的