因此,我使用EF Code First成功創建我的實體並查詢數據庫以顯示項目。實體框架和MVC3創建和更新模型
我現在想提供一種編輯記錄的方法。
我有一個包含Post類:
(TypeName = "varchar")]
[Required()]
public string Headline { get; set; }
public virtual PostType PostType { get; set; }
PostType是一類我寫它有一個ID和名稱來分類文章到新聞,博客等
現在,在我的編輯控制器我看到帖子並將其傳遞給視圖模型中的視圖。我還獲得了不同帖子類型的IEnumerable。
在我看來,我用的是下面:
<div class="formFieldContainer">
@Html.LabelFor(model => model.Post.PostType)
@Html.DropDownListFor(model => model.Post.PostType, new SelectList(Model.PostTypes, "ID", "Name"))
@Html.ValidationMessageFor(model => model.Post.PostType)
</div>
<div class="formFieldContainer">
@Html.LabelFor(model => model.Post.Headline)
@Html.EditorFor(model => model.Post.Headline)
@Html.ValidationMessageFor(model => model.Post.Headline)
</div>
對我的編輯控制器我有以下處理後:
[HttpPost, ValidateAntiForgeryToken, ValidateInput(false)]
public ActionResult Edit(int id, FormCollection collection) {
var model = new PostViewModel();
model.Post = _pr.GetPost(id); //gets the post from my post repository
model.PostTypes = _ptr.GetPostTypes();
try {
UpdateModel(model.Post, "Post");
_pr.Save();
return RedirectToRoute("Posts", new { pageNumber = 0 }); //for now go to the homepage
} catch (Exception e) {
ModelState.AddModelError("_FORM", e.Message);
return View(model);
}
}
現在沒有職位類型列表中,只是標題此作品。但是,對於帖子類型,它不會。我得到「1是無效的」(1是選擇列表的值),這是有道理的,因爲我的Post模型期望PostType對象,而不是int。
我想過做這樣的事情:
model.Post.PostType = model.PostTypes.Where(x => x.ID == Int32.Parse(collection.GetValues("Post.PostType")[0])).Select(p => p).FirstOrDefault();
但是1)它不工作,因此其obviosuly不正確的做法和2),因爲「Post.PostType」依然存在,的UpdateModel失敗。
有關如何做到這一點的任何想法?
你是什麼意思不起作用?沒有具體細節就無能爲力。 – 2011-06-04 17:06:14
另一個PostType被添加到數據庫!它應該是現有的,但每次都會創建一個新的。 – Terry 2011-06-04 17:06:58