2010-08-18 27 views
3

是否可以從代碼端添加和刪除DataAnnotations,特別是[requried]?我的問題是,我想讓用戶能夠在我們的CRUD應用程序中保存不完整的表單,但同時使用DataAnnotations驗證的功能。從代碼中添加和刪除數據註釋

如果這是不可能的,我可以做什麼最好的辦法呢?

回答

0

這是不可能的添加,刪除或動態修改DataAnnotations因爲它們的屬性。屬性是類型的一部分,在運行時不能更改。

你可以使用的ModelState作爲Larsenal提示前提是:

  • 你使用它驗證已被執行之後。 (在此之前,ModelState將爲空,它不提供對所有驗證器的訪問,它僅在發生驗證器錯誤後才存儲驗證器錯誤)
  • 您沒有任何基於DataAnnotationValidators和火災的客戶端驗證錯誤,阻止您甚至到達服務器端驗證。
2

您可以在模型上保留DataAnnotation屬性,然後根據需要從代碼中手動清除驗證錯誤。它可能是這個樣子:

if (certainCondition == true) { 
    ModelState["someKey"].Errors.Clear(); 
    ModelState["anotherKey"].Errors.Clear(); 
} 
+0

在這裏,您並未刪除DataAnnotation,只是清除了ModelErrors。這個問題是它消除了所有的錯誤,而不是一個特定的錯誤。例如,說「someKey」既是必需的,又有長度限制。通過清除,你會失去這兩個。如果由於數據庫對字段長度有限制而存在長度限制,那麼如果嘗試保存,則會在保存時丟失數據。但是,如果你可以刪除只是選擇錯誤,這將工作。 – Scott 2010-08-18 21:06:50

+0

雖然我沒有親自做過,但我相信你可以刪除任何關鍵的單個錯誤。在你的例子中,爲什麼不只有一個StringLength屬性?如果你希望用戶能夠保存一個「不完整」的表單,那麼在什麼意義上是「必需的」字段?是否真的只是一個業務規則,說輸入不是「完整的」,除非某些字段被填充? – Larsenal 2010-08-18 21:26:16