2013-06-11 103 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

的確是這樣,使用關於ValidatorTryValidateObject方法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世界中的Controller中的模型綁定上發生的驗證,該驗證遍歷整個對象圖。 – neumann1990

相關問題