Asp.net-Mvc
使用數據註釋進行自定義驗證
我正在使用數據註釋來檢查正在輸入的數據,但是當涉及到更自定義的數據驗證方式時,我被卡住了。
我需要對數據庫執行查詢以查看那裡是否存在東西,然後在出現“自定義 db-check 錯誤”時向使用者報告,例如“公司名稱已存在”
如何與數據註釋一起實現這樣的事情?
我使用 3.5sp1 附帶的 linq 和實體框架完成了所有查詢等
/米
擴展數據註釋的自定義屬性
您將必須編寫自己的屬性,這些屬性將針對數據儲存驗證您的對象實例。
確保你的類繼承
System.ComponentModel.DataAnnotations.ValidationAttribute類:public class MustNotExist: ValidationAttribute { ... }警告
當我需要驗證對像在數據儲存中是否唯一時,我遇到了類似的情況。但是這種驗證在實體類本身上是不可能的,因為它應該只適用於那些正在創建的實體,而不是當你已經從數據儲存中返回你的實體時。
我的解決方案是有一個單獨的介面、類和屬性。
public interface IExternalValidator ... class DBUniqueValidator: IExternalValidator ... class ValidateExternallyAttribute: FilterAttribute, IActionFilter { ... public ValidateExternallyAttribute(Type validatorType, Type entityType) ... ... }我能夠將我的屬性放在獲取實體參數的控制器操作上。過濾器操作屬性然後檢查控制器操作參數(它可以輕鬆訪問它們的類型和值)並針對正確的參數(屬性定義中提供的類型)執行外部驗證器,並在驗證失敗時填充 ModelState 錯誤。
[ValidateExternally(typeof(DBUniqueValidator), typeof(User))] public ActionResult RegisterUser(User newUser) { if (!this.ModelState.IsValid) { // act accordingly - probably return some error depending on model state errors } // register new user in data store }通過這種方式,我能夠只對那些真正需要它的操作執行外部驗證,而且這種技術還幫助我的控制器操作程式碼保持簡潔。我所要做的就是檢查是否有任何模型狀態錯誤。