DataAnnotations验证在默认模型绑定器中进行,我见过的大多数示例都使用Controller中的Model.IsValid
来验证模型是否有效。由于我的控制器操作调用业务层方法,我想在那里验证实体:
答案 0 :(得分:3)
我将首先回答你的问题#3:是的,在使用视图模型时,在视图模型的属性上添加数据注释验证属性。正如您所指出的,视图模型与UI相关联,因此它们具有表示关注点,并且验证严格用于UI输入验证。您在此处应用的验证属性将由框架自动调用,您可以检查控制器中的ModelState.IsValid(您也指出)。
在验证业务层中的对象时,有很多方法可以做到这一点。例如,您也可以 在业务层域模型实体上使用数据注释。您还可以使用其他框架,如Enterprise Library验证应用程序块,Fluent Validation等。但在这种情况下,您可能会进行显式调用以验证您的域对象(并且每个框架都有它们的这样做的机制)。我假设您的视图模型和域模型之间的映射(可能与AutoMapper之类的东西)给出了上面的描述。
说了这么多,在提到你的问题#1时,我不会关闭模型绑定器验证。让这个性能在您的视图模型上正常验证。将视图模型映射到域模型类。然后随意为您的域模型执行额外的业务对象验证层。您可能甚至没有在MVC项目中进行此验证 - 这可能会封装在您的应用程序中的其他位置的业务层中。