【发布时间】:2012-07-03 22:27:37
【问题描述】:
我是 MVC3 的新手,正在尝试编写一个博客应用程序作为学习工具。
我为博文创建了一个数据库对象,并使用带有读/写操作的控制器生成了一个控制器,并使用 Entity Framework 来控制实体。
我在使用编辑命令时遇到问题。一篇博客文章大约有 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 调用显然会引发异常。
如何确保所有属性都返回到第二个编辑方法以正确进行更新?
【问题讨论】:
标签: c# sql-server asp.net-mvc-3 entity-framework