2009-09-16 66 views
1

我对有关客户端验证或模型绑定的解答不感兴趣。实际上,这个问题可能适用于MVC之外的任何数据访问类库,但我认为这些问题是相似的。ASP.NET MVC中的模型验证有哪些最佳实践?

我正在使用当前存储库模式与我的实体(模型)进行数据访问。目前,存储库处理所有的CRUD操作,但我想我的模型负责保存自己以便进行验证。我该如何处理?

我可以在我的模型中添加一个IsValid方法,然后存储库可以调用它,然后可以在存储库保存模型之前运行我的所有业务逻辑,但是没有任何操作存储库调用此验证逻辑,对吧?

如果我希望模型具有Save方法,那么他们自己保存的正确方法是什么?他们不应该回到存储库,如果他们?

我应该如何处理这个问题的想法?

谢谢!

回答

2

允许模型验证保存操作没有任何固有的错误;甚至可以返回false或抛出异常。当您必须向用户提供有关其输入数据为何无效的反馈时,就会遇到困难。

验证可以并且应该首先发生在视图中。这可以很容易地使用jQuery库完成客户端。但数据必须在用户提交后在服务器端进行验证,并且如果仍然存在数据问题,则仍然必须向用户提供解释。

由于需要提供用户反馈,因此可以在View Model对象中有效提供此类服务器端验证。这个数据对象有两个目的:首先,它将在视图和控制器之间传递的数据封装在强类型对象中。其次,它提供了一个方便的地方来执行验证,而不需要控制器或视图中的验证逻辑。

如果使用Linq to SQL,View Model可以是实际数据模型类的扩展,使用C#中的partial关键字。这使您可以使用生成的Linq to SQL类的现有ORM功能,同时增加额外的验证功能。我假设这在实体框架和其他ORM中以相同的方式工作。

视图模型中的NerdDinner教程这里描述: http://nerddinnerbook.s3.amazonaws.com/Part6.htm

的验证过程描述如下:
http://nerddinnerbook.s3.amazonaws.com/Part3.htm

+0

罗伯特 - 我喜欢这个答案。最近与asp.net mvc一起工作,我发现在哪里做验证非常困难,我认为你关于使用ViewModel的观点代表了适用于非平凡应用程序的最佳方式...... – 2010-08-20 09:54:49