我是 MVC3 的新手,正在尝试编写一个博客应用程序作为学习工具。
我为博客文章创建了一个数据库对象,并使用带有读/写操作的控制器和使用实体框架控制实体的视图生成了一个控制器。
我在编辑命令时遇到问题。一篇博客文章大约有 6 个属性,但我只想允许编辑来修改文章的标题和内容。我的代码如下:
public ActionResult Edit(int id)
{
blog_Post blog_post = db.blog_Post.Find(id);
return View(blog_post);
}
//
// POST: /Post/Edit/5
[HttpPost]
public ActionResult Edit(blog_Post blog_post)
{
if (ModelState.IsValid)
{
db.Entry(blog_post).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(blog_post);
}
@model BlogVersion1._0.blog_Post
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>blog_Post</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PostContent)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PostContent)
@Html.ValidationMessageFor(model => model.PostContent)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
出现的问题出在公共 ActionResult Edit(blog_Post blog_post) 方法中。在 Edit(int id) 方法中,我在其中放置了一个断点,我可以看到 blog_post 被正确地传递给视图(包括填充的所有属性)。
但是返回到 [HttpPost] 方法的 blog_post 缺少 UserId、DateCreated 等属性。由于缺少所需的外键,显然在 db.SaveChanges 调用上引发了异常。
如何确保所有属性都返回到第二个编辑方法以正确进行更新?