Asp.net mvc 如何修复EntityValidationErrors
我想更新用户,但当我单击“提交”时,会出现以下错误:此队列中的EntityValidationErrors: ligne335:context.SaveChanges() 我正在ASP.NET MVC项目中使用实体框架: 这是我在控制器中的编辑操作:Asp.net mvc 如何修复EntityValidationErrors,asp.net-mvc,entity-framework,visual-studio,Asp.net Mvc,Entity Framework,Visual Studio,我想更新用户,但当我单击“提交”时,会出现以下错误:此队列中的EntityValidationErrors: ligne335:context.SaveChanges() 我正在ASP.NET MVC项目中使用实体框架: 这是我在控制器中的编辑操作: // GET: ApplicationUsers/Edit/2 : [AuthLog(Roles = "Super Administrateur")] public ActionResult Edit(string id)
// GET: ApplicationUsers/Edit/2 :
[AuthLog(Roles = "Super Administrateur")]
public ActionResult Edit(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
ApplicationUser user = context.Users.Find(id);
if (user == null)
{
return HttpNotFound();
}
return View(user);
}
// POST: ApplicationUsers/Edit/2
[AuthLog(Roles = "Super Administrateur")]
[HttpPost, ValidateInput(false), ActionName("Edit")]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,No_,RaisonSociale,Magasin,RemiseHabituelle,FamilyName,FirstName,EmailSup,Login,AffPrix,PasserCmd,EmailRespMagasin,Admin,BoursePR,Actif,IdSession,VendeurItirénant,ChargeClient,ValidOuAnnul,Email,EmailConfirmed,PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName")] ApplicationUser applicationUser)
{
if (ModelState.IsValid)
{
context.Entry(applicationUser).State = EntityState.Modified;
context.SaveChanges();
return RedirectToAction("ListUsers","Account");
}
return View(applicationUser);
}
这是编辑视图:
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.Login, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Login, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Login, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Enregistrer" class="btn btn-default" />
</div>
</div>
</div>
}
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@Html.HiddenFor(model=>model.Id)
@LabelFor(model=>model.Login,htmlAttributes:new{@class=“controllabel col-md-2”})
@EditorFor(model=>model.Login,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Login,“,new{@class=“text danger”})
}
解决方案是:用户名属性是必需的。我通过在编辑操作中添加块try{}catch{}来发现此错误:
public ActionResult Edit([Bind(Include = "Id,No_,RaisonSociale,Magasin,RemiseHabituelle,FamilyName,FirstName,EmailSup,Login,AffPrix,PasserCmd,EmailRespMagasin,Admin,BoursePR,Actif,IdSession,VendeurItirénant,ChargeClient,ValidOuAnnul,Email,EmailConfirmed,PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName")] ApplicationUser applicationUser)
{
if (ModelState.IsValid)
{
context.Entry(applicationUser).State = EntityState.Modified;
try
{
context.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
Exception raise = dbEx;
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{ string message = string.Format("{0}:{1}",
validationErrors.Entry.Entity.ToString(),
validationError.ErrorMessage);
// raise a new exception nesting
// the current instance as InnerException
raise = new InvalidOperationException(message, raise);
}
}
throw raise;
}
return RedirectToAction("ListUsers","Account");
}
return View(applicationUser);
}
记住,如果你问一个模糊的问题,你会得到一个模糊的答案。但是,如果你给我们提供详细信息和背景,我们可以提供一个有用的、相关的答案,并承诺我会在询问时通过勾选复选框记住这些提示?谢谢你回答我Gert Arnold,我会用更多细节更新我的问题