2009-09-16 89 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