0

我正在开发一个带有实体框架的小型 ASP.NET MVC4 Web 应用程序,将该应用程序与我的数据库链接起来。我让 Visual Studio 2012 在控制器和视图中生成所有 CRUD 操作,除了编辑之外一切正常。

我生成的对象如下:

public partial class Post
{
    public Post()
    {
        this.Attachment = new HashSet<Attachment>();
    }

    [Display(AutoGenerateField = false)]
    public int post_id { get; set; } // This is the PK of my table
    public string title { get; set; }
    public string text { get; set; }
    [Display(AutoGenerateField = false)]
    public System.DateTime created { get; set; }
    [Display(AutoGenerateField = false)]
    public Nullable<System.DateTime> modified { get; set; }
    [Display(AutoGenerateField = false)]
    public string author { get; set; } // This is a FK from the "author" table

    public virtual ICollection<Attachment> Attachment { get; set; }
    public virtual Author Author1 { get; set; }
}

而Edit POST操作如下:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Post post)
{
    if (ModelState.IsValid)
    {
        post.modified = DateTime.Now;
        db.Entry(post).State = EntityState.Modified;
        db.SaveChanges(); // DbUpdateConcurrencyException thrown here
        return RedirectToAction("Index");
    }
    ViewBag.author = new SelectList(db.Author, "author1", "password", post.author);
    return View(post);
}

当我提交编辑后的帖子时,ASP.NET 吐出一个 DbUpdateConcurrencyException 说该操作影响了意外的行数 (0)。

调试的时候发现author、created、post_id都是null;他们都应该保持自己的价值观。

我怎样才能解决这个问题?

提前致谢。

4

1 回答 1

1

在您的 Edit View() 上,您应该在隐藏字段中添加这些属性:

@Html.HiddenFor(m => m.post_id) etc.

这样他们就会绑定到后期模型上,你可以在你的编辑方法中使用它们。

于 2013-06-11T14:53:55.487 回答