带有实体框架的ASP.NET MVC4不在Edit操作中传递字段

时间:2013-06-11 14:47:25

标签: c# asp.net-mvc-4 visual-studio-2012 entity-framework-5

我正在开发一个小型ASP.NET MVC4 Web应用程序,其中Entity Framework将应用程序与我的数据库相关联。我让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; }
}

编辑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;所有这些都应该保持他们的价值观。

我该如何解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:1)

在编辑视图()上,您应该在隐藏字段中添加这些属性:

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

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