我正在开发一个小型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;所有这些都应该保持他们的价值观。
我该如何解决这个问题?
提前致谢。
答案 0 :(得分:1)
在编辑视图()上,您应该在隐藏字段中添加这些属性:
@Html.HiddenFor(m => m.post_id) etc.
这样他们就可以在帖子模型上绑定,你可以在你的编辑方法中使用它们。