2011-11-21 53 views
1

今天有一個非常酷的想法,但我不知道如何去做。使用派生類和數據註釋進行軟驗證

我在asp.net MVC3 C#中建立一頁一頁的表單,保存到每頁末尾的臨時區域。

現在這個數據進入一個有幾個枚舉類的類,所以它相對複雜。現在,我希望用戶能夠放入任何他們想要的東西而不需要驗證(顯然安全除外),這樣他們就可以拋出任何他們想要的東西,但是我希望這可以通過軟驗證。

我想使用元數據進行驗證,但是由於這提供了硬性驗證,我不能把它放在窗體用作模型的類上(強類型)。所以,我認爲最好的辦法是從表單上的類中派生出一個類,然後拋出數據註釋(我希望它可能以某種方式應用一個接口,但我假設它不是)

然後,當用戶想要提交表單到我們的數據庫,我希望表單通過和驗證。我想通過將沒有數據註解的類轉換成dataAnnotations爲空的類,並且發生的任何錯誤(基本上是數據無效時)生病都能夠在屏幕上列出並告訴他們來解決它。

現在,我希望能夠做的另一件事是,我可以以某種方式使用註釋類來軟驗證窗體,當用戶在上面。所以我可以說「我們建議你把這個領域放進去」。而不是,「這個領域不能是空的」。

所以,結論是:

  1. 是否可以打開和關閉接口,如果是的話,怎麼樣?
  2. 我將如何轉換CLASSA成CLASSB其中CLASSB從ClassA的派生和使用dataAnnotations
  3. 在轉換期間(2續),我將如何捕捉任何數據錯誤,並列出他們
  4. 我怎麼會軟驗證關閉classB的形式,其中模型是類A

我希望這是所有可能的。這似乎是最乾淨的方式。如果有人能想到更好的方法來做到這一點,我都是耳朵......或眼睛。


更新的印象是dataAnnotations會阻止我把任何不正確的數據在1 林,但是我做的那一刻一些測試,似乎我能夠以編程方式應用不正確的數據。即在必填字段中爲null。那麼數據註釋只適用於頁面上的驗證嗎?如果是這樣,不要理會我的整個問題。


更新2 我還在尋找一個答案,如果任何人都可以貢獻

回答

0

我不認爲你可以在MVC驗證框架做到這一點。驗證是一種二元操作;輸入是有效的或不是。在驗證過程中用於指示成功或失敗的ValidationResult類沒有「可能」成員(使用術語),它可以是或不是。這就是說,由於您可以控制整個驗證過程,因此您可以隨時定義您自己的一組數據註釋屬性,並在您的控制器中測試我所假設的「警告」,並做出相應的反應,也許通過使用顯示如「我們建議您在這個領域」或類似的東西輸入數據串的通知區域。

這是假設你不使用不顯眼的客戶端驗證,這我不會確定如何規避我在說的是在你的控制器中使用ModelState變量,你可以超越IsValid測試

+0

感謝您的觀察,是一個很好的...我知道驗證是一個二元操作。我更注重檢查我是否得到了真實或虛假的信息,但仍然能夠提交。 – MrJD