예제 #1
0
        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);
            }
        }