我已经创建了一个默认的 MVC 3 项目,并为我的模型创建了默认的编辑页面。如果我不碰它,一切都会正常。
现在我想删除编辑页面上的编辑字段之一(因为我不希望主键可编辑)。所以我只是将 EditFor 更改为 DisplayFor。那么一切都正确播种,但如果我想保存,我会收到以下错误:
DbUpdateConcurrencyException was unhandled by user code
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
在编辑操作中,我可以看到,我的模型类不再获得主键(它是 0),因此更新不起作用。
// POST: /Weiterleitung/Edit/5
[HttpPost]
public ActionResult Edit(Rufnummern_Weiterleitungen rufnummern_weiterleitungen)
{
if (ModelState.IsValid)
{
db.Entry(rufnummern_weiterleitungen).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(rufnummern_weiterleitungen);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
如何避免此错误而不将模型的每个字段显示为编辑字段?
最佳答案
您的 POST 操作会错过 Id,因为 DisplayFor<> 不会呈现 HTML 控件,因此该值不会发布回您的 Controller 操作。您可以将 id 作为参数传递给您的操作(然后需要将该参数添加到 View 中的 Html.BeginForm() 调用并相应地修改您的编辑操作),或者您可以添加一个 HiddenFor<> 字段包含 ID。隐藏字段在回发时传递到 Controller ,并且应该由默认绑定(bind)处理程序识别,该处理程序根据表单值创建 Rufnummern_Weiterleitungen
实例。
关于asp.net-mvc-3 - 如果删除字段,MVC 3 默认编辑将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10892929/