2011-04-23 75 views
2

如何在模型上運行所有DataAnnotation驗證?asp.net mvc 3在模型上運行驗證

我從代碼構建模型實例,我沒有模型狀態綁定或任何東西。我只想運行我所有的驗證...我正在使用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 

我知道這可能是一個愚蠢的問題,但我似乎無法在任何地方找到答案..

+0

可能重複[單元測試ASP.NET DataAnnotations驗證(http://stackoverflow.com/questions/2167811/unit-testing-asp-net-dataannotations-validation) – KyleMit 2015-02-09 22:48:12

回答

5

這類似於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; 
    } 
} 
+0

非常不錯..謝謝 – alexcepoi 2011-04-28 04:25:33

0

這個問題的標題包括ASP.net MVC

請注意,Validator類和MVC驗證具有細微的差異。

例如:

  1. DataAnnotations.Validator不支持哥們類箱子外面。
  2. MVC可以配置爲使用另一個驗證框架,例如FluentValidation。

如果你想運行MVC的驗證和填充ModelState中,你可以調用TryValidateModelValidateModel

如果您不想填充ModelState,請在控制器中使用此代碼段。

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