我有一个包含4个装配项目的asp.NET MVC 5项目。那些是;
我在域层中有一个模型类。
public class Employee
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required(ErrorMessage = "*Please insert employee's first name")]
[Display(Name = "First Name", Prompt = "First Name")]
public string firstName { get; set; }
[Required(ErrorMessage = "*Please insert employee's last name")]
[Display(Name = "Last Name", Prompt = "Last Name")]
public string lastName { get; set; }
[Required(ErrorMessage = "*Please insert employee's email address")]
[Display(Name = "E-Mail", Prompt = "E-Mail")]
[Remote("IsEmailExists", "Employee", ErrorMessage = "This email is already registered: please enter a different email.")]
[RegularExpression(@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,3})$",
ErrorMessage = "*This email is invalid. Please enter a valid email")]
public string email { get; set; }
}
Employee的Controller类位于Web.UI项目/ Layer中。在电子邮件属性的模型类中,我使用远程验证来检查注册新员工时电子邮件是否存在。检查在Employee Controller中的相关方法。
public JsonResult IsEmailExists(string UserEmail)
{
//check if any of the Email matches the UserEmail specified in the Parameter using the ANY extension method.
return Json(!db.Employees.Any(x => x.email == UserEmail), JsonRequestBehavior.AllowGet);
}
这不符合我的预期。我搜索了一个问题的解决方案,我想到的是,我必须使用View模型,因为我正在使用汇编项目。但我不知道如何做到这一点。如果有人可以提供帮助,那将是一个很大的帮助。 感谢。
答案 0 :(得分:3)
您的[RemoteAttribute]
无效,因为您调用的方法参数不正确。它必须是
public JsonResult IsEmailExists(string email)
参数的名称必须与您应用该属性的属性的名称相匹配。
话虽如此,你仍然应该使用视图模型。例如int ID
不合适(尚未创建用户)。 [Remote]
和[Display]
等属性不适用于数据模型。假设您需要输入密码,您的视图模型将需要一个额外的属性,例如ConfirmPasswrd
,其[Compare]
属性不适用于数据模型。
有关您应该使用视图模型的原因及其好处的详细信息,请参阅What is ViewModel in MVC?。
附注:我建议您使用[EmailAddress]
属性代替[RegularExpression]
属性。