2011-06-29 37 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”。