2013-07-29 52 views
0

我是ValidationAttributes的新手。我想開發一個ValidationAttribute子類(MustExistAttribute),它可以以兩種方式之一運行,具體取決於運行時情況。例如,我有一個名爲RECORD的類,名爲KEY,我希望驗證測試類似於「在數據庫中查找該KEY並查看它是否存在」。帶條件參數值的ValidationAttribute

然而,僅有這些還不夠。我還需要測試另一個屬性(RECORD.IsNew)。然後,如果這也是真的,這個KEY存在的事實是一個錯誤,但是如果RECORD.IsNew是假的,那麼驗證應該通過。換句話說,屬性的IsValid覆蓋不僅需要訪問框架自動提供的值(KEY),還需要訪問RECORD(或RECORD.IsNew)。

這可能嗎?

回答

0

我認爲我的問題的答案是「否」。但是有一個解決方法。

在設置了驗證已經應用的點,即,在那裏我會常碰到這樣的

if(ModelState.IsValid)

,我可以添加我想要的任何測試,然後使用類似

ModelState.AddModelError("KEY", "The database already has a record for the new KEY.");

AddModelError會將IsValid設置爲false,因此我可以重新測試並從那裏開始。框架像處理所有其他錯誤一樣處理我的新錯誤,並將它與KEY屬性相關聯。