是否可以在控制器之外获得ModelState.IsValid功能?

Sha*_*ore 6 c# asp.net-mvc

假设我在MVC应用程序中有一个使用[Required]字段等注释的模型.

它在控制器中很好地调用ModelState.IsValid,但是我说我不在控制器中,并希望在模型上的应用程序的其他地方运行类似的检查.有可能以某种方式调用此功能吗?

class MyModel{
   [Required]
   public string Name{get;set;}
}

// Code elsewhere in app that isn't the controller
MyModel model = new MyModel();
//Can I run a modelstate.isvalid type check here on model?  Would return false if Name wasn't set
Run Code Online (Sandbox Code Playgroud)

Jas*_*kan 18

是的,使用类中的TryValidateObject方法.ValidatorSystem.ComponentModel.DataAnnotations

var results = new List<ValidationResult>();
var context = new ValidationContext(model, null, null);
if (!Validator.TryValidateObject(model, context, results))
{
    // results will contain all the failed validation errors.
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,此验证不会通过任何复杂的子对象或集合进行递归.Validator.TryValidateObject(...)只是立即执行属性和字段验证,并且每天调用它,而不是在MVC世界中的Controller中进行模型绑定时发生的验证,该验证遍历整个对象图. (7认同)