我遇到了这个错误,它没有提供任何关于根本原因的细节,但我弄清楚问题是什么。我想分享它,以便遇到它的其他人可能会成功解决问题。
我有以下课程:
public class BankUser : IdentityUser, IUserProfile
{
#region IUserProfile Members
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[Display(Name = "Email Address")]
[EmailAddress(ErrorMessage="Invalid Email Address")]
public string Email { get; set; }
[Display(Name = "Time Zone")]
public int TimeZone { get; set; }
public Dictionary<string, string> TimeZoneOptions
{
get
{
Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("(GMT -10:00) Hawaii", "-10");
d.Add("(GMT -9:00) Alaska", "-9");
d.Add("(GMT -8:00) Pacific Time", "-8");
d.Add("(GMT -7:00) Mountain Time", "-7");
d.Add("(GMT -6:00) Central Time", "-6");
d.Add("(GMT -5:00) Eastern Time", "-5");
d.Add("Unknown", "0");
return d;
}
}
[Display(Name = "Phone")]
[Phone(ErrorMessage = "Invalid phone number.")]
[StringLength(10, MinimumLength = 10, ErrorMessage = "Phone number must be 10 characters long.")]
public string Phone { get; set; }
#endregion
}
如您所见,我使用其他属性扩展了IdentityUser。在尝试创建新用户UserManager.CreateAsync()
时,我的视图仅将用户名和密码作为表单字段。当尝试仅使用UserName和Password提交表单时,系统将尝试验证电子邮件是否已通过,因为它具有Required属性。
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new BankUser() { UserName = model.UserName };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
答案 0 :(得分:1)
<强>解决方案强> 我必须在表单中添加电子邮件作为字段或删除必需属性。一旦我做了其中任何一个,代码就按预期工作了。
希望有所帮助。
答案 1 :(得分:0)
如果您使用实体框架:
错误消息(来自PMC中的Update-Database命令): 一个或多个实体的验证失败。请参阅&#39; EntityValidationErrors&#39;财产了解更多详情。
<强>解决方案:强> 此问题的一个原因是Seed方法运行时的验证错误。有关调试Seed方法的提示,请参见种子和调试实体框架(EF)DB。
有关详细信息,请访问:Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application (12 of 12)
希望这会有所帮助......
答案 2 :(得分:0)
我认为您在创建ApplicationUser实例时传递的是null值。 在我的情况下,我在ViewModel中不需要设置Postcode,但在IdentityModel中仍然需要PostCode。 因此,您应该在IdentityModel中删除PostCode的必需注释。并将迁移添加到更新数据库。