这是非常愚蠢的,但我不能为我的生活弄明白。
我想在添加或编辑Employee时验证Employee用户名是否已存在。这是我的观点模型:
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 :(得分:1)
传递额外的标记以指示您所处的模式,例如: bool isEditMode
并在此基础上调整结果。您可以使用AdditionalFields属性传递该信息;另外,请看一下:Remote Validation in ASP.Net MVC 3: How to use AdditionalFields in Action Method
答案 1 :(得分: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; }
}
当edit-functionlity还包含一些“特色”时,您可以从基类EmployeeViewmodel派生第三个类“EditEmployeeViewModel”。