2011-06-29 38 views
0

這是非常愚蠢的,但我不能爲我的生活弄明白。編輯時驗證對象存在

我想驗證添加或編輯員工當員工的用戶名不存在。這裏是我的視圖模型:

public class EmployeeViewModel 
{ 
    [ScaffoldColumn(false)] 
    public int EmployeeId { get; set; } 

    [Remote("UsernameExists", "Employees", ErrorMessage = "Username already exists")] 
    public string Username { get; set; } 
} 

而且在我的控制器:

public ActionResult UsernameExists(string username) 
{ 
    return Json(!_employeesRepository.UsernameExists(username), JsonRequestBehavior.AllowGet); 
} 

在員工信息庫中的函數:

public bool UsernameExists(string username) 
{ 
    return Employees.Where(e => e.Username.ToLower().Equals(username.ToLower())).Count() > 0; 
} 

這個偉大的工程,當我創建的員工。但如果我編輯之一,我試圖保存它,我得到一個錯誤,用戶名已存在(這是真的)。所以我需要以某種方式告訴函數,如果我使用該用戶名編輯Employee,那麼用戶名可以存在。

這是可能的遠程驗證?

回答

0

您可以通過使用兩個不同的視圖模型來解決這個問題,其中您從另一個視圖模型中派生出一個視圖模型:超類可用於編輯,子類用於具有遠程驗證的插入。

public class EmployeeViewModel // The normal one, can be used for editing 
{ 
    [ScaffoldColumn(false)] 
    public int EmployeeId { get; set; } 

    public virtual string Username { get; set; } 
} 

public class InsertEmloyeeViewModel : EmployeeViewModel 
{ 
    [Remote("UsernameExists", "Employees", ErrorMessage = "Username already exists")] 
    public override string Username { get; set; } 

} 

當編輯functionlity還包含了一些「特色菜」,你可以得到從基類EmployeeViewmodel第三類「EditEmployeeViewModel」。