2015-06-12 96 views
-1

我需要驗證一個值是否已經存在於數據庫中。所以我寫了一個自己的ValidationAttribute來檢查它。 問題是我這個模型添加到屬性:獨特屬性驗證

[UniqueAttribute(ErrorMessage = "This title already exists")] 

,在添加視圖工作正常,但編輯該對象時,我不知道如何處理這個問題,因爲,如果用戶沒有按」不改變標題,因爲驗證被執行,也會有錯誤信息。 我可以在不使用此ValidationAttribute的情況下使用模型視圖,但如果用戶將標題更改爲仍存在的另一個標題,則會違反唯一性。

如果在更新對象後標題是唯一的,您是否知道如何驗證編輯視圖?

謝謝。

例如:

public class UniqueAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     if (value == null) 
     { 
      return true; 
     } 

     MyDataContext db = new MyDataContext(); 
     foreach (var item in db.AnyObjects.ToList()) 
      if (item.Title.Equals(value)) 
       return false; 
     return true; 
    } 
} 

將該添加一個對象,但不進行編輯時,當工作良好。

+1

「UniqueAttribute」屬性的代碼是什麼? –

+0

調用數據庫,檢查值是否在表中,如果是,則返回true,否則返回false。 – Underfaker

+0

我的代碼是正確的,我不需要更正它。我正在尋找正確的想法,然後我可以爲自己實施它。 – Underfaker

回答

0

在您的模型中創建一個新屬性,用於存儲以前(不變或現有)的標題。所以如果添加,這將是string.empty,在編輯的情況下它將是未修改的標題值。在你的驗證中使用反射來比較這個屬性和title屬性。如果它們匹配(並且不是兩個string.empty),那麼這意味着用戶編輯了記錄但沒有更改標題,並且驗證通過。如果它們不匹配,則表示用戶更改了標題,並且如果用戶輸入的新標題已存在,則可以檢查db。

+0

如何獲取Validation Class中的title屬性,因爲我使用上述形式,而IsValid方法只獲取一個參數。 – Underfaker

+0

使用validationcontext可以使用反射來獲取其他屬性。檢查此帖:http://stackoverflow.com/questions/6075339/mvc-form-validation-on-multiple-fields –

+0

對不起,我不明白這篇文章。我不知道該如何解決我的問題 – Underfaker