编辑时正在验证对象是否存在

本文关键字:对象 是否 存在 验证 编辑 | 更新日期: 2023-09-27 18:00:55

这太傻了,但我一辈子都想不出来。

我想在添加或编辑员工时验证员工用户名是否不存在。这是我的视图模型:

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;
}

当我创建员工时,这非常有效。但是,如果我正在编辑一个,并试图保存它,我会得到一个错误,即用户名已经存在(这是真的(。因此,我需要以某种方式告诉函数,如果我使用该用户名编辑员工,则该用户名可以存在。

通过远程验证,这可能吗?

编辑时正在验证对象是否存在

传入一个额外的标志来指示您所处的模式,例如bool isEditMode,并在此基础上调整结果。您可以使用AdditionalFields属性来传递该信息;另外,看看这里:ASP.Net MVC中的远程验证3:如何在操作方法中使用AdditionalFields

您可以通过使用两个不同的视图模型来解决这个问题,在这两个视图模型中,您可以从另一个派生一个:超类可以用于编辑,子类用于带有远程验证的插入。

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; }
}

当编辑函数也包含一些"speciality"时,可以从基类EmployeeViewmodel派生第三个类"EditEmployeeViewModel"。