public ActionResult Edit(Product product)
        {
            if (product.Shelved != null && product.Shelved.Value)
            {
                return(View("Error", new ErrorView()
                {
                    message = ProductCannotEdit
                }));
            }
            try
            {
                var pics = GetPictures(product);
                foreach (ProductPicture pic in pics)
                {
                    if (pic.ID == 0)
                    {
                        svc.Create(pic);
                    }
                    else
                    {
                        svc.Update(pic);
                    }
                }
                var specifications = GetSpecifications(product);
                foreach (var specification in specifications)
                {
                    if (specification.ID == 0)
                    {
                        svc.Create(specification);
                    }
                    else
                    {
                        svc.Update(specification);
                    }
                }

                //******************************************************
                product.Description = product.Description ?? "";
                product.Weight      = product.Weight ?? 0;
                //******************************************************

                svc.Update(product);
                product.Specifications  = specifications;
                product.ProductPictures = pics;
                ViewData["MallNames"]   = Makenames(product, MallSize);
                ViewBag.Tags            = GetTags(product.ID.Value);
                return(View(product));
            }
            catch (Exception e)
            {
                return(View("Error", new ErrorView()
                {
                    message = e.Message
                }));
            }
        }
        private Dictionary <long, string> Makenames(Product product, PictureSize size)
        {
            Dictionary <long, string> Names = new Dictionary <long, string>();

            if (product != null)
            {
                foreach (var pic in product.ProductPictures)
                {
                    Names.Add(pic.ID.Value, _pictureService.GetName(pic, size));
                }
            }
            return(Names);
        }
 public ActionResult Add(Product product)
 {
     try
     {
         if (string.IsNullOrEmpty(product.Name))
         {
             ErrorView error = new ErrorView()
             {
                 message = EmptyProductName
             };
             return(View("Error", error));
         }
         product.Specifications = GetSpecifications(product);
         var orignpics = GetPictures(product);
         product.OwnerID         = GetOwnerID();
         product.ProductPictures = orignpics;
         svc.Create(product);
         if (orignpics.Count > 0)
         {
             var newpics = new ProductPicture[orignpics.Count()];
             for (int i = 0; i < orignpics.Count(); i++)
             {
                 ProductPicture pic = new ProductPicture()
                 {
                     ID   = orignpics[i].ID,
                     Name = orignpics[i].Name,
                     Path = MakePath(product.ID.Value),
                 };
                 newpics[i] = pic;
             }
             svc.Update(newpics);
             _pictureService.Move(orignpics.ToArray(), newpics);
         }
         return(RedirectToAction("Index"));
     }
     catch (Exception e)
     {
         ErrorView error = new ErrorView()
         {
             message = e.Message
         };
         return(View("Error", error));
     }
 }
        private Collection <Specification> GetSpecifications(Product product)
        {
            int count    = Convert.ToInt32(Request.Form["RowsCount"]);
            var response = new Collection <Specification>();
            //默认规格
            Specification defaultS = new Specification()
            {
                ID             = Convert.ToInt32(Request.Form["id0"]),
                ProductName    = product.Name,
                Name           = "",
                Price          = !String.IsNullOrEmpty(Request.Form["price0"]) ? Convert.ToDecimal(Request.Form["price0"]) : 0,
                Stock          = !String.IsNullOrEmpty(Request.Form["stock0"]) ? Convert.ToInt32(Request.Form["stock0"]) : 0,
                ReferencePrice = 0,
                WarningStock   = 0,
                IsDefault      = true,
                IsShow         = count == 0,
                OwnerID        = product.OwnerID,
                ProductID      = product.ID,
            };

            response.Add(defaultS);
            for (int i = 1; i < count + 1; i++)
            {
                Specification specification = new Specification()
                {
                    ID             = Convert.ToInt32(Request.Form["id" + i]),
                    ProductName    = product.Name,
                    Name           = Request.Form["name" + i],
                    Price          = !String.IsNullOrEmpty(Request.Form["price" + i]) ? Convert.ToDecimal(Request.Form["price" + i]) : 0,
                    Stock          = !String.IsNullOrEmpty(Request.Form["stock" + i]) ? Convert.ToInt32(Request.Form["stock" + i]) : 0,
                    ReferencePrice = 0,
                    WarningStock   = 0,
                    IsDefault      = false,
                    IsShow         = Convert.ToBoolean(Request.Form["isShow" + i]),
                    OwnerID        = product.OwnerID,
                    ProductID      = product.ID,
                };
                response.Add(specification);
            }
            return(response);
        }
        private Collection <ProductPicture> GetPictures(Product product)
        {
            int count = Convert.ToInt32(Request.Form["PicCount"]);
            Collection <ProductPicture> pictures = new Collection <ProductPicture>();

            for (int i = 0; i < count; i++)
            {
                if (!string.IsNullOrEmpty(Request.Form["picId" + i]))
                {
                    ProductPicture pic = new ProductPicture()
                    {
                        ID         = Convert.ToInt32(Request.Form["picId" + i]),
                        Name       = GetHashName(Request.Form["picName" + i]),
                        OriginName = Request.Form["picName" + i],
                        Path       = Request.Form["picPath" + i],
                        IsFirst    = Convert.ToBoolean(Request.Form["picIsFirst" + i]),
                        OwnerID    = product.OwnerID,
                        ProductID  = product.ID,
                    };
                    pictures.Add(pic);
                }
            }
            return(pictures);
        }