我想知道是否有任何类似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:我不想使用数据注释!
答案 0 :(得分:1)
是的,您可以这样做,但您需要为ModelState
创建一个包装器,以检查每个属性是否有效并转换为发送到View。
您可以使用名为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等控件反转集成......在保存之前检查存储库中的一些信息。