asp.net-mvc-3 - 如果删除字段,MVC 3 默认编辑将不起作用

标签 asp.net-mvc-3

我已经创建了一个默认的 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/

相关文章:

asp.net-mvc-3 - Mvc脚手架 : How to support many-to-many relationships between entities

c# - 自定义 OutputCache 提供程序在 Add() 和 Set() 上生成不同的键

asp.net-mvc-3 - ASP.Net MVC 3 多复选框列表

c# - 禁用 EditorFor

jquery - jquery 弹出窗口中的不引人注目的验证

asp.net-mvc-3 - 如何发布部分 View 数据?

c# - 如何使 Controller 中的缓存数据 [OutputCache] 失效?

c# - 在ASP.NET MVC 3中关闭应用程序时,在global.asax中调用的正确方法是什么?

javascript - window.onbeforeunload 未在 Layout.cshtml 中触发

javascript - 如何在jquery表中找到与单击的按钮相关的<tr>数据?