public ActionResult Edit(ProductManageEditViewModel model)
        {
            if (ModelState.IsValid)
            {
                //save cover img
                string newCoverImgUrl;
                if(model.CoverImg!=null)
                {
                    var uploadedFile = new UploadedFile(model.CoverImg);
                    var coverImgName = uploadedFile.SaveAsWithGuid(Server.MapPath("~/ImgRepository/ProductImgs/" + model.Id));

                    var pathRel = Url.Content("~/ImgRepository/ProductImgs/" + model.Id+"/"+coverImgName);
                    newCoverImgUrl = pathRel;
                }
                else
                {
                    newCoverImgUrl = db.Products.Find(model.Id).CoverImgUrl;
                }

                //update ProductId for each uploaded ProductImg
                if(!string.IsNullOrEmpty(model.UploadImgsIdString))
                {
                    var uploadedImgsIdArray = model.UploadImgsIdString.Split(',');
                    foreach (var item in uploadedImgsIdArray)
                    {
                        if (!string.IsNullOrEmpty(item))
                        {
                            var productImg = db.ProductImages.Where(pImage => pImage.Id.ToString() == item).Single();

                            //move to product's folder
                            var imgName = UploadedFile.UploadedFileMoveTo(productImg.Url, Path.Combine(Server.MapPath("~/ImgRepository/ProductImgs/" + model.Id), (new FileInfo(productImg.Url)).Name));

                            var newPathRel = Url.Content("~/ImgRepository/ProductImgs/" + model.Id + "/" + imgName);
                            productImg.Url = newPathRel;
                            productImg.ProductId = model.Id;

                            db.SaveChanges();
                        }
                    }
                }

                if(!string.IsNullOrEmpty(model.DeletedImgsFileNameString))
                {
                    var deletedImgsFileNameArray = model.DeletedImgsFileNameString.Split(',');
                    foreach(var item in deletedImgsFileNameArray)
                    {
                        if(!string.IsNullOrEmpty(item))
                        {
                            var deletedImgList=db.ProductImages.Where(pImage => pImage.Name == item && pImage.ProductId == model.Id).ToList();
                            foreach(var deletedImg in deletedImgList)
                            {
                                db.ProductImages.Remove(deletedImg);
                                db.SaveChanges();
                            }
                        }
                    }
                }

                //find properties in db
                var productPropertis = db.ProductProperties.Where(p => model.ProductPropertyForProduct.Contains(p.Id)).ToList();

                var product = db.Products.Find(model.Id);
                product.Name = model.Name;
                product.ShortDescription = model.ShortDescription;
                product.Description = model.Description;
                product.Remark = model.Remark;
                product.CoverImgUrl = newCoverImgUrl;
                product.Price = model.Price;
                product.CurrentDiscount = model.CurrentDiscount;
                product.DiscountStartTime = model.DiscountStartTime;
                product.DiscountEndTime = model.DiscountEndTime;
                product.PublishTime = product.PublishTime;
                product.IsSeasonalProduct = model.IsSeasonalProduct;
                product.SaleStartTime = model.SaleStartTime;
                product.SaleEndTime = product.SaleEndTime;
                product.CategoryId = model.ProductCategoryForProduct;

                //many to many relationship solution
                product.Properties.Clear();
                product.Properties = productPropertis;

                db.Entry(product).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            model.ProductCategories = db.ProductCategories.ToList();
            model.ProductProperties = db.ProductProperties.ToList();
            return View(model);
        }
        // GET: ProductManage/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Product product = db.Products.Find(id);
            if (product == null)
            {
                return HttpNotFound();
            }
            //ViewBag.CategoryId = new SelectList(db.ProductCategories, "Id", "Name", product.CategoryId);

            var productCategories = db.ProductCategories.ToList();

            var productProperies = db.ProductProperties.ToList();
            var productPropertyIdList = new List<int>();
            foreach(var item in product.Properties)
            {
                productPropertyIdList.Add(item.Id);
            }
            var vm = new ProductManageEditViewModel {
                Id = product.Id,
                Name = product.Name,
                ShortDescription=product.ShortDescription,
                Description=product.Description,
                Remark=product.Remark,
                CoverImgUrl=product.CoverImgUrl,

                Price=product.Price,
                CurrentDiscount=product.CurrentDiscount,
                DiscountStartTime=product.DiscountStartTime,
                DiscountEndTime=product.DiscountEndTime,

                PublishTime=product.PublishTime,
                IsSeasonalProduct=product.IsSeasonalProduct,
                SaleStartTime=product.SaleStartTime,
                SaleEndTime=product.SaleEndTime,

                ProductCategoryForProduct = product.Category.Id,
                ProductCategories=productCategories,

                ProductPropertyForProduct=productPropertyIdList,
                ProductProperties=productProperies
            };

            return View(vm);
        }