Solution pour la “Validation a échoué à une ou plusieurs entités. Voir " EntityValidationErrors la propriété pour plus de détails.”

J'ai rencontré cette erreur, il n'a fourni aucun détail quant à ce que la cause a été mais j'ai compris ce qu'est le problème. Je voulais la partager, pour que les autres personnes qui rencontrent il pourrait avoir du succès dans la résolution du problème.

J'ai eu la classe suivante:

    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
}

Comme vous pouvez le voir, j'ai étendu IdentityUser avec des propriétés supplémentaires. De mon point de vue seulement avaient un nom d'utilisateur et le Mot de passe que des champs de formulaire lorsque vous essayez de créer un nouvel utilisateur UserManager.CreateAsync(). Lorsque vous essayez d'envoyer le formulaire avec juste le nom d'utilisateur et le Mot de passe du système essayez de valider que le courrier Électronique était écoulé depuis qu'il avait l'attribut Requis.

        //
//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);
}
Vous devriez poster votre solution comme une réponse, puis accepter votre propre réponse, car il n'est vraiment pas à la recherche d'un.
Merci! J'ai ajouté ci-dessous.

OriginalL'auteur FrankO | 2014-01-31