我試圖找出我怎麼能在一個單一的位置定義的驗證規則爲我的域對象我的應用程序中,但已經到了阻礙跑......DRY驗證與MVC2
一些背景:我的應用程序有幾個部分: - 數據庫 - DAL - 業務邏輯層 - SOAP API層 - MVC網站
的MVC網站訪問通過SOAP API數據庫,就像第三方會。我們在MVC網站以及SOAP API層中使用服務器和客戶端驗證。
爲了避免必須手動編寫客戶端驗證我們正在執行結合Html.TextBoxFor強類型視圖和Html.ValidationMessageFor HTML輔助,如圖步驟3 here。我們還爲每個表單創建自定義模型,其中一個表單爲多個域對象提供輸入。
這是問題開始的地方,HTML助手從模型讀取數據註釋驗證屬性。在大多數情況下,我們的表單處理多個域對象,並且您無法在頁面中指定多個類型... Inherits =「System.Web.Mvc.ViewPage <MvcApplication.Models.SomeModel>」%> page指示。所以我們不得不創建一個自定義模型類,這意味着將驗證屬性從域對象複製到模型類。
我花了相當長的一段時間尋找解決方法,此,這樣的引用了來自域類和自定義MVC模式相同MetadataType,但不會有以下幾個原因工作:
您只能爲每個類指定一個MetadataType屬性,因此如果模型引用多個域對象(每個域對象都有其自己的元數據類型),就會出現問題。
如果模型類不包含在引用的MetadataType中指定的屬性,那麼該模型只處理給定域對象的屬性的子集。
我看過其他解決方案,但也無濟於事。如果任何人有關於如何實現驗證邏輯的單一來源的任何想法,可以跨MVC客戶端和服務器端驗證功能和其他位置(如我的SOAP API)工作,我很樂意聽到它!
由於提前,
馬修
這樣做,謝謝! 在你的頭像上有草莓面膜嗎? :) – Matthew 2010-04-24 06:31:32
事實上它是!這是J!NX XD眼鏡的草莓面膜 – 2010-04-24 08:26:53