2013-06-11 2 views
3

Скажите, что у меня есть модель, аннотированная полями [Обязательные] и т. Д. В приложении MVC.Получает возможность использования ModelState.IsValid вне контроллера?

Он отлично работает в контроллере, чтобы просто вызвать 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 

ответ

14

Да это, используя метод TryValidateObject на Validator класса в System.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. 
} 
+6

К сожалению, эта проверка не регрессирует через какие-либо сложные дочерние объекты или коллекции. Validator.TryValidateObject (...) просто выполняет немедленную проверку свойств и полей и называет это днем, в отличие от проверки, которая происходит при привязке модели в контроллере в мире MVC, которая пересекает весь граф объекта. – neumann1990

Смежные вопросы