编辑时正在验证对象是否存在
本文关键字:对象 是否 存在 验证 编辑 | 更新日期: 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"。