是否可以從代碼端添加和刪除DataAnnotations,特別是[requried]?我的問題是,我想讓用戶能夠在我們的CRUD應用程序中保存不完整的表單,但同時使用DataAnnotations驗證的功能。從代碼中添加和刪除數據註釋
如果這是不可能的,我可以做什麼最好的辦法呢?
是否可以從代碼端添加和刪除DataAnnotations,特別是[requried]?我的問題是,我想讓用戶能夠在我們的CRUD應用程序中保存不完整的表單,但同時使用DataAnnotations驗證的功能。從代碼中添加和刪除數據註釋
如果這是不可能的,我可以做什麼最好的辦法呢?
這是不可能的添加,刪除或動態修改DataAnnotations因爲它們的屬性。屬性是類型的一部分,在運行時不能更改。
你可以使用的ModelState作爲Larsenal提示前提是:
您可以在模型上保留DataAnnotation屬性,然後根據需要從代碼中手動清除驗證錯誤。它可能是這個樣子:
if (certainCondition == true) {
ModelState["someKey"].Errors.Clear();
ModelState["anotherKey"].Errors.Clear();
}
在這裏,您並未刪除DataAnnotation,只是清除了ModelErrors。這個問題是它消除了所有的錯誤,而不是一個特定的錯誤。例如,說「someKey」既是必需的,又有長度限制。通過清除,你會失去這兩個。如果由於數據庫對字段長度有限制而存在長度限制,那麼如果嘗試保存,則會在保存時丟失數據。但是,如果你可以刪除只是選擇錯誤,這將工作。 – Scott 2010-08-18 21:06:50
雖然我沒有親自做過,但我相信你可以刪除任何關鍵的單個錯誤。在你的例子中,爲什麼不只有一個StringLength屬性?如果你希望用戶能夠保存一個「不完整」的表單,那麼在什麼意義上是「必需的」字段?是否真的只是一個業務規則,說輸入不是「完整的」,除非某些字段被填充? – Larsenal 2010-08-18 21:26:16