Asp.net mvc 4 使用导致验证失败的Dataannotations比较字段验证
我正在为用户构建一个注册/登录引擎。。除了在我的模型中使用比较验证之外,其他一切都很好。当它去保存我的新用户实体时,它给我这个错误 一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性 我知道这是比较验证,因为如果我删除该属性,我的系统工作正常。。另外,为我的密码重置问题添加下拉列表也是一个很好的方法。。提前谢谢你,这是我的密码。。。请帮忙 我的模型:Asp.net mvc 4 使用导致验证失败的Dataannotations比较字段验证,asp.net-mvc-4,data-annotations,Asp.net Mvc 4,Data Annotations,我正在为用户构建一个注册/登录引擎。。除了在我的模型中使用比较验证之外,其他一切都很好。当它去保存我的新用户实体时,它给我这个错误 一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性 我知道这是比较验证,因为如果我删除该属性,我的系统工作正常。。另外,为我的密码重置问题添加下拉列表也是一个很好的方法。。提前谢谢你,这是我的密码。。。请帮忙 我的模型: public class User { public int UserID { get;
public class User
{
public int UserID { get; set; }
[Required(ErrorMessage = "A User Name is required max 10 characters")]
[StringLength(10)]
public string UserName { get; set; }
[Required(ErrorMessage = "A First Name is required")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last Name is required")]
public string LastName { get; set; }
[Required]
[DataType(DataType.EmailAddress, ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
[DataType(DataType.Password, ErrorMessage = "Invalid Password")]
public string Password { get; set; }
[Compare("Password")]
[Display(Name = "Confirmation Password")]
public string ConfirmPassword { get; set; }
public string PasswordSalt { get; set; }
[Required(ErrorMessage = "Password Reset Question required")]
public string PasswordHint { get; set; }
[Required(ErrorMessage = "Password Reset Question Answer required")]
public string PasswordHintAnswer { get; set; }
public String UserRole { get; set; }
}
我的控制器:
public ActionResult Registration()
{
return View();
}
[HttpPost]
public ActionResult Registration(FacultyScheduler.Models.User user)
{
if (ModelState.IsValid)
{
using (var db = new FacultyContext())
{
var crypto = new SimpleCrypto.PBKDF2();
var encrypPass = crypto.Compute(user.Password);
var sysUser = db.Users.Create();
sysUser.UserName = user.UserName;
sysUser.Email = user.Email;
sysUser.UserID = user.UserID;
sysUser.LastName = user.LastName;
sysUser.FirstName = user.FirstName;
sysUser.Password = encrypPass;
sysUser.ConfirmPassword = user.ConfirmPassword;
sysUser.PasswordSalt = crypto.Salt;
sysUser.PasswordHint = user.PasswordHint;
sysUser.PasswordHintAnswer = user.PasswordHintAnswer;
db.Users.Add(sysUser);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
}
return View(user);
}
此错误不是由Compare属性引起的-它是在尝试将数据保存到数据库时发生的验证异常。您可以捕获异常并整理实体验证错误,如下所示:
try
{
// Your code
}
catch (DbEntityValidatidationException ex)
{
var errors = ex.EntityValidationErrors
.SelectMany(o => o.ValidationErrors)
.Select(o => o.ErrorMessage);
// Log errors out or just debug and inspect them
}
检查将告诉您问题所在的消息集合的错误
然而,由于问题似乎与ConfirmPassword属性有关,因此必须提出这个问题;你为什么要储存这个?您的用户真的需要将密码保存在两个不同的列中吗?特别是因为这似乎是他们密码的纯文本版本,这意味着您的加密毫无意义。感谢您的即时回复。。我尝试保存第二个密码字段的唯一原因是想看看这是否可以修复错误。我的计划是删除它你是对的。。如何将错误记录出来。。我知道如何分步调试。。再次感谢您的时间。