2010-05-25 90 views
0

我想編寫一個自定義ValidationAttribute來檢查給定的值是否唯一。僅當值更改時驗證屬性?

問題是,在編輯屏幕中,不能保證用戶實際改變了值,導致錯誤的錯誤。

有沒有辦法檢查我的屬性值是否真的改變了?或者,只有當值改變時纔可以觸發屬性?

我感覺這個要求可能不屬於屬性?

+0

前兩句話打得不好。你能否澄清跟蹤變更的唯一性? – jfar 2010-05-25 14:50:50

+1

他在說的是,如果對於用戶1的電子郵件地址是[email protected],並且該用戶更新了他的個人資料,他想檢查電子郵件地址(僅用於說明的示例)仍然是唯一的。但是,如果用戶沒有更改他的電子郵件地址,那麼他的唯一檢查將失敗,因爲已經爲用戶更新了[email protected]。 – Tommy 2010-05-25 20:18:43

回答

1

當你說ValidationAttibute時,你的意思是使用DataAnnotations?如果是這樣,那麼所有這一切都適用,否則,對不起,我誤解了,只有部分會這樣做。

我認爲你最好的選擇是在存儲庫或BLL中使用你的唯一密鑰記錄,至少我是這麼做的。獲取記錄的以前的值,看看他們是否改變。如果他們確實改變了,那麼運行你的唯一性檢查。

如果你可以把這個邏輯加入到ValidationAttribute中,那麼給你更多的權力,但我不確定validationAttribute是否是最好的事情,因爲有辦法繞過它們。根據我對這些屬性的理解,您應該將它們用作業務邏輯驗證的補充,而不是驗證模型的唯一方法。

See here for more info on DataAnnotations

編輯: 很公平,現在讓我們來看看,如果我可以給出一個答案,以幫助你:)看看這個鏈接,它是對任何表中的任何屬性的唯一性檢查的代碼。相當深入的LINQ to SQL的東西,但看起來像它運作良好。你應該能夠用這個裝飾任何屬性,就像使用<Required><StringLenght>屬性一樣。

ASP.NET Forums

+0

獨特的檢查也在模型上強制執行,但我想從中創建一個屬性(或數據註釋),這樣我就可以利用自動客戶端檢查並將我的業務需求規則集中在一個地方。 – 2010-05-26 06:58:10