2011-03-22 59 views
2

有沒有辦法在MVC 3中進行相同類型的客戶端驗證,而無法在視圖模型級別設置驗證? 我有兩個要求阻止我在viewmodel級別添加驗證。我希望能夠具有相同類型的「內置」驗證,但不更改視圖模型或控制器代碼。我希望能夠在視圖級別部署後更改,打開/關閉和驗證。理想情況下,我希望能夠編輯視圖標記,而無需編寫和維護自己的JavaScript。MVC 3沒有註釋的客戶端驗證?

+0

出於好奇,這些要求是什麼? – neontapir 2011-03-22 14:59:33

+0

要求是任何驗證都可以打開/關閉,驗證中的閾值可以改變。所有後期部署,無需重新編譯後端。 – SideByEach 2011-03-22 19:50:14

+0

Gotcha。我最終實現了一個使用IronRuby腳本引擎處理類似請求的解決方案,因此我不必重新編譯應用程序以更改其運行時行爲。 – neontapir 2011-03-22 21:56:17

回答

0

您可以創建自己的TypeDescriptionProvider,它將允許在運行時增強視圖模型。

基於this代碼示例(XmlMetadataTypeDescriptor,XmlMetadataTypeDescriptionProvider),你應該能夠:使用包含屬性驗證外部XML

  1. 增強視圖模型。
  2. 打開驗證與

    TypeDescriptor.AddProvider

  3. ,並關閉它:

    TypeDescriptor.RemoveProvider

更新

對於M礦石信息,你可以閱讀偉大的文章:"Understanding the TypeDescriptor: A Metadata Engine for Designtime Code"

+0

你有沒有更簡單的例子?您鏈接的示例似乎有一個損壞的解決方案文件。 – SideByEach 2011-03-22 19:48:53

+0

解決方案的錯誤是什麼?因爲它爲我工作。請記住,您不需要整個代碼作爲RiaServices的示例,您需要根據自己的需要對其進行定製:僅使用XmlMetadataTypeDescriptor,XmlMetadataTypeDescriptionProvider和依賴類。如果您仍然遇到問題,我可以發佈我正在使用的代碼。 – baalazamon 2011-03-23 11:43:44

+0

感謝Baal的幫助,但是我無法讓項目編譯,而且它的語言我不明白。我將嘗試追蹤XmlMetadataTypeDescriptor的VB.net示例。 – SideByEach 2011-03-23 14:33:54