public PostEditVm GetPostEditVm() { PostEditVm result = new PostEditVm(); result = Mapper.Map<Post, PostEditVm>(_post); result.PostContents = new List<IContentType>(); foreach (var i in _post.PostContents) { if (i.ContentDataType == ContentTypeEnums.Text) { ContentTextVm newItem = null; newItem = Mapper.Map<PostContent, ContentTextVm>(i); UnicodeEncoding encoding = new UnicodeEncoding(); newItem.ContentData = encoding.GetString(i.ContentData); newItem.EditMode = ContentModeEnum.None; result.PostContents.Add(newItem); } if (i.ContentDataType == ContentTypeEnums.Image) { ContentImageVm newItem = null; newItem = Mapper.Map<PostContent, ContentImageVm>(i); try { newItem.ContentData = i.ContentData; } catch (ArgumentException ex) { newItem.ContentData = null; } newItem.EditMode = ContentModeEnum.None; result.PostContents.Add(newItem); } } return result; }
public ActionResult EditPost(PostEditVm Model) { if (ModelState.IsValid) { Post Post = null; if (Model.PostId == 0) { Post = Mapper.Map<PostEditVm, Post>(Model); Post.PubDate = DateTime.Now; Post.ApplicationUserId = User.Identity.GetUserId(); } else { Post = (from a in _unitOfWork.db.Posts.Include(p=>p.PostContents) where a.PostId == Model.PostId select a) .SingleOrDefault(); if (Post == null) throw new NotImplementedException("Post with such Id not found."); } foreach(var mc in Model.PostContents) { PostContent content = (from c in Post.PostContents where c.PostContentId == mc.PostContentId select c) .SingleOrDefault(); switch (mc.EditMode) { case ContentModeEnum.Create: PostContent pc = GetPostContent(mc); pc.PostContentId = 0; Post.PostContents.Add(pc); break; case ContentModeEnum.Edit: content = GetPostContent(mc); break; case ContentModeEnum.Delete: Post.PostContents.Remove(content); break; } } if (Model.PostId == 0) { _unitOfWork.db.Posts.Add(Post); } return RedirectToAction("Index", "Band"); } else { return View("EditPost", Model); } }