【发布时间】:2016-11-01 23:30:28
【问题描述】:
我一直在尝试完成一个简单的应用程序,我在暑期实习时得到了练习。我几乎没有 ASP.NET 的背景,所以我得到了额外的工作。我正在尝试从 c# 中的 http post 函数获取要更新的数据库条目,但是当函数运行时会引发验证错误。我一直在试图找出错误的原因,但是我似乎无法弄清楚它为什么不起作用。任何帮助表示赞赏。
这是错误:
一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.Entity.Validation.DbEntityValidationException:一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
来源错误:
第 130 行:db.Entry(productNote).State = EntityState.Modified;
第 131 行:db.SaveChanges();
第 132 行:返回 RedirectToAction("Index");
源文件:C:\Users\Morph\Documents\Visual Studio 2015\Projects\NotesWebApp\NotesWebApp\Controllers\ProductsController.cs 行:131
这是我的控制器中的 http post 功能:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "ID,ProductID,NoteText,CreateDate,Archived")] ProductNote productNote)
{
Response.Write("<script type=\"text/javascript\">alert('Works');</script>");
if (ModelState.IsValid)
{
db.Entry(productNote).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
这是我提交给函数的表单:
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(noteItem => note.ID)
@Html.HiddenFor(noteItem => note.ProductID)
@Html.HiddenFor(noteItem => note.NoteText)
@Html.HiddenFor(noteItem => note.CreateDate)
<div class="checkbox">
@Html.EditorFor(noteItem => note.Archived)
@Html.ValidationMessageFor(noteItem => note.Archived, "", new { @class = "text-danger" })
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
}
【问题讨论】:
-
See 'EntityValidationErrors' property for more details告诉你什么。并参考How to create a Minimal, Complete, and Verifiable example。此代码的 90% 与您的问题无关
-
转到实体验证错误的 msdn 页面很少告诉我为什么会出现问题。我已经访问并尝试查看信息
-
您需要中断异常并查看 EntityValidationErrors 属性
-
您好@Ellis,您可以参考this 以帮助您获得准确的错误消息。
-
那你的方法是错误的。您可以为每个项目创建一个表单,其中只有 ID 的路由值并发布到
public ActionResult Archive(int ID)(您可以使用 ajax 执行此操作,以便用户可以继续存档笔记,同时留在同一页面上)
标签: c# asp.net asp.net-mvc