我有一個簡單的MVC 2博客,我正在建設,因爲我學習。我的編輯頁面有標題,正文,日期,啓用和標籤。標籤是我的問題出現的地方。我有一個標籤表和一個Posts表和標籤通過PostTag表關聯到一篇文章。我有我的linq模型安裝正確,我甚至有添加HttpPost行動工作。HttpPost從編輯頁面更新我的模型與兒童的操作
我的問題是與編輯視圖,在這裏我想刪除了關於在加載時Post對象模型標記,並與上Post對象模型時,它是HttpPost-ED的標籤對其進行更新。我的模型是複雜的,我怎麼能做到這一點?我編輯觀點:
[HttpPost, Authorize, ValidateInput(false)]
public ActionResult Edit(int id, FormCollection form)
{
Post p = repo.GetPost(id);
if (p == null)
return View("NotFound");
if (ModelState.IsValid)
{
try
{
UpdateModel(p);
//Do something here to update the model p.TagList child model
// the p.TagList object is not updated through UpdateModel
repo.Save();
return RedirectToAction("Post", "Blog", new { id = p.PostID });
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
ModelState.AddRuleViolations(p.GetRuleViolations());
}
}
return View(p);
}
我所做的幫忙翻譯編輯頁面上標記對象的集合是通過TagListString對象剛剛連載用空格分隔每個標籤名稱。當我將它發回時,我可以通過迭代我的TagListString輕鬆地重建TagList對象 - 但它不會更新!
我試過幾種更新TagList模型的方法。循環播放並做回購。刪除()現有的,然後添加然後重建和添加新的。我試過只是創建一個新的集合,並以這種方式添加新的Tag對象。以下是我嘗試過的一些事情。
public void UpdateTagList(System.Data.Linq.EntitySet<PostTag> postTags, string tagListString)
{
db.PostTags.DeleteAllOnSubmit(postTags);
db.PostTags.InsertAllOnSubmit(GenerateTagListFromString(tagListString, postTags.SingleOrDefault().Post));
}
private System.Data.Linq.EntitySet<PostTag> GenerateTagListFromString(string tagListString, Post post)
{
System.Data.Linq.EntitySet<PostTag> tagList = new System.Data.Linq.EntitySet<PostTag>();
foreach (var t in tagListString.Trim().Split(' '))
{
//look for this tag name in cache (MvcApplication.AllTags)
Tag found = MvcApplication.AllTags.SingleOrDefault(item => item.TagName.Trim().ToLower() == t.Trim().ToLower());
//new PostTag for this new Post
PostTag pt = new PostTag();
pt.Tag = found ?? new Tag() { TagName = t };
pt.Post = post;
tagList.Add(pt);
}
return tagList;
}
我最初實現了我的方法來獲取Post對象,但是我的子對象沒有正確傳入,是因爲我沒有自定義的ModelBinder指定如何綁定該對象?我使用.NET 3.5 – MaseBase 2010-06-24 04:48:46
我創建了自定義的ModelBinder,它比我想象的要容易得多,但現在當我調用repo.Save()時,它不會將我的對象保存回數據庫。如果我在保存之前做了repo.Add(p),那麼它確實很好地添加它。但是,如何通知更新後的信息庫?由於某些原因,我的存儲庫類不知道發生了什麼變化。 – MaseBase 2010-06-24 06:25:42