2012-12-03 43 views
0

我想知道是否有像IValidatableObject但對於測試ModelState中輸入任何接口,這樣的事情:接口,用於驗證視圖模型

public class EditUserViewModel: IAnyInterface 
{ 
    public string Name{get;set;} 
    public string Age{get;set;} 

    public IEnumerable<ModelStateError> Validate() 
    { 
      if(//something) 
       yield new ModelStateError("error"); 
    } 
} 

PS:我不希望使用數據的註釋!

回答

1

是的,你可以做到這一點,但你需要爲你的ModelState創建一個包裝來檢查每個屬性是否有效並轉換爲發送到視圖。

您可以使用名爲Fluent Validation的庫。它是免費的,很容易與asp.net mvc和可擴展庫集成以驗證您的ViewModel。請看:

流利的驗證頁面 http://fluentvalidation.codeplex.com/

流利驗證源代碼(如果需要) https://github.com/JeremySkinner/FluentValidation

ASP.NET MVC集成: http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=Documentation

這樣做,當你呼籲您的發佈操作ModelState.IsValid它將通過您爲ViewModel設置的流暢驗證類進行驗證。

您也可以與像Unity,Ninject,StructureMap等的控制反轉整合...來檢查存儲庫中的一些信息,然後再保存它。

+0

謝謝,我會檢查它。 – MuriloKunze