2012-12-03 67 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