簡體   English   中英

使用派生類和dataAnnotations進行軟驗證

[英]Soft Validation using derived classes and dataAnnotations

今天有一個很酷的主意,但我不確定如何去做。

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

現在,此數據進入一個包含幾個可枚舉類的類,因此它相對復雜。

現在,我希望用戶無需驗證即可放入他們想要的地獄(顯然安全性除外),以便他們可以放入所需的東西,但是我希望對此進行軟驗證。

我想使用元數據進行驗證,但是由於這提供了嚴格的驗證,因此我無法將其放在表單用作模型(強類型)的類上。 因此,我認為最好的方法是從表單上的類派生一個類,並在其上引發數據注釋(我希望可以以某種方式應用接口,但是我假設不是)

然后,當用戶要將表單提交到我們的數據庫時,我希望表單通過並驗證。 我認為這樣做是不正確的,方法是將沒有數據批注的類轉換為帶有dataAnnotations的空數據批注,將發生的任何錯誤(基本上是當數據無效時)都無法在屏幕上列出並告訴他們修復它。

現在,我想做的另一件事是,我可以以某種方式使用帶注釋的類在用戶使用表單時對表單進行軟驗證。 所以我可以說“我們建議您放入此字段”。 而不是“此字段不能為空”。

因此,結論是:

  1. 是否可以打開和關閉接口,如果可以,怎么辦?
  2. 我如何將classA轉換為classB,其中classB源自classA並使用dataAnnotations
  3. (繼續2)在轉換期間,我將如何捕獲任何數據錯誤並將其列出
  4. 我如何在模型為classA的表單上從classB進行軟驗證

我希望這一切都有可能。 這似乎是最干凈的方法。 如果有人能想出一種更好的方法來做到這一點,那么我就是耳朵...還是眼睛。


Update 1 Im的印象是dataAnnotations會阻止我輸入任何不正確的數據。但是,目前我正在做一些測試,看來我能夠以編程方式應用不正確的數據。 即在必填字段中為null。 那么數據注釋僅適用於頁面驗證嗎? 如果是這樣,請忽略我的整個問題。


更新2我仍然在尋找答案,如果有人可以貢獻

我認為您無法使用MVC中的驗證框架來做到這一點。 驗證是二進制操作; 輸入有效或無效。 用於指示驗證過程中成功或失敗的ValidationResult類沒有“也許”成員(使用術語),它是“是”或“不是”。

就是說,由於您可以控制整個驗證過程,因此您始終可以定義自己的數據批注屬性集,並在控制器中測試我認為是“警告”的內容,並相應地做出反應,例如可以使用通知區域顯示類似“我們建議您在此字段中輸入數據”之類的字符串。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM