C# 编辑时验证对象是否存在
这太傻了,但我一辈子都搞不懂 我想验证在添加或编辑员工时,员工用户名是否不存在。这是我的视图模型:C# 编辑时验证对象是否存在,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,这太傻了,但我一辈子都搞不懂 我想验证在添加或编辑员工时,员工用户名是否不存在。这是我的视图模型: public class EmployeeViewModel { [ScaffoldColumn(false)] public int EmployeeId { get; set; } [Remote("UsernameExists", "Employees", ErrorMessage = "Username already exists")] public s
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属性传入该信息;另外,请看这里:您可以通过使用两个不同的ViewModel来解决此问题,在这两个ViewModel中,您可以从另一个ViewModel派生一个ViewModel:超类可用于编辑,子类用于带有远程验证的插入
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; }
}
当编辑函数还包含一些“特殊性”时,可以从基类EmployeeViewmodel派生第三类“EditEmployeeViewModel”