public HttpResponseBase SaveDescription()
        {
            string json = string.Empty;
            try
            {
                string tags = Request.Form["Tags"] ?? "";
                string notices = Request.Form["Notice"] ?? "";
                JavaScriptSerializer jsSer = new JavaScriptSerializer();

                if (!string.IsNullOrEmpty(Request.Form["ProductId"]))
                {
                    uint product_id = uint.Parse(Request.Form["ProductId"]);
                    _productMgr = new ProductMgr(connectionString);
                    Product product = _productMgr.Query(new Product { Product_Id = product_id }).FirstOrDefault();
                    if (product != null)
                    {
                        product.Page_Content_1 = Request.Form["page_content_1"] ?? "";
                        product.Page_Content_2 = Request.Form["page_content_2"] ?? "";
                        product.Page_Content_3 = Request.Form["page_content_3"] ?? "";
                        product.Product_Keywords = Request.Form["product_keywords"] ?? "";
                        if (!string.IsNullOrEmpty(Request.Form["product_buy_limit"]))
                        {
                            product.Product_Buy_Limit = uint.Parse(Request.Form["product_buy_limit"]);
                        }
                        ArrayList sqls = new ArrayList();
                        sqls.Add(_productMgr.Update(product));
                        //TAG
                        List<ProductTagSet> tagSets = jsSer.Deserialize<List<ProductTagSet>>(tags);
                        tagSets.ForEach(m => m.product_id = product_id);
                        _productTagSetMgr = new ProductTagSetMgr("");
                        sqls.Add(_productTagSetMgr.Delete(new ProductTagSet { product_id = product_id }));
                        tagSets.ForEach(m => sqls.Add(_productTagSetMgr.Save(m)));
                        //NOTICE
                        List<ProductNoticeSet> noticeSets = jsSer.Deserialize<List<ProductNoticeSet>>(notices);
                        noticeSets.ForEach(m => m.product_id = product_id);
                        _productNoticeSetMgr = new ProductNoticeSetMgr("");
                        sqls.Add(_productNoticeSetMgr.Delete(new ProductNoticeSet { product_id = product_id }));
                        noticeSets.ForEach(m => sqls.Add(_productNoticeSetMgr.Save(m)));

                        _functionMgr = new FunctionMgr(connectionString);
                        string function = Request.Params["function"] ?? "";
                        Function fun = _functionMgr.QueryFunction(function, "/ProductCombo");
                        int functionid = fun == null ? 0 : fun.RowId;
                        HistoryBatch batch = new HistoryBatch { functionid = functionid };
                        batch.batchno = Request.Params["batch"] ?? "";
                        batch.kuser = (Session["caller"] as Caller).user_email;

                        _tableHistoryMgr = new TableHistoryMgr(connectionString);
                        if (_tableHistoryMgr.SaveHistory<Product>(product, batch, sqls))
                        {
                            json = "{success:true}";
                        }
                        else
                        {
                            json = "{success:false}";
                        }
                    }
                }
                else
                {
                    int writer_id = (Session["caller"] as Caller).user_id;
                    string product_id = "0";
                    if (!string.IsNullOrEmpty(Request.Form["OldProductId"]))
                    {
                        product_id = Request.Form["OldProductId"];
                    }
                    ProductTemp proTemp = new ProductTemp();
                    proTemp.Page_Content_1 = Request.Form["page_content_1"] ?? "";
                    proTemp.Page_Content_2 = Request.Form["page_content_2"] ?? "";
                    proTemp.Page_Content_3 = Request.Form["page_content_3"] ?? "";
                    proTemp.Product_Keywords = Request.Form["product_keywords"] ?? "";
                    if (!string.IsNullOrEmpty(Request.Form["product_buy_limit"]))
                    {
                        proTemp.Product_Buy_Limit = uint.Parse(Request.Form["product_buy_limit"]);
                    }
                    proTemp.Writer_Id = writer_id;
                    proTemp.Combo_Type = COMBO_TYPE;
                    proTemp.Product_Id = product_id.ToString();
                    List<ProductTagSetTemp> tagTemps = jsSer.Deserialize<List<ProductTagSetTemp>>(tags);
                    foreach (ProductTagSetTemp item in tagTemps)
                    {
                        item.Writer_Id = writer_id;
                        item.Combo_Type = COMBO_TYPE;
                        item.product_id = product_id;
                    }
                    List<ProductNoticeSetTemp> noticeTemps = jsSer.Deserialize<List<ProductNoticeSetTemp>>(notices);
                    foreach (ProductNoticeSetTemp item in noticeTemps)
                    {
                        item.Writer_Id = writer_id;
                        item.Combo_Type = COMBO_TYPE;
                        item.product_id = product_id;
                    }

                    _productTempMgr = new ProductTempMgr(connectionString);
                    if (_productTempMgr.DescriptionInfoSave(proTemp, tagTemps, noticeTemps))
                    {
                        json = "{success:true}";
                    }
                    else
                    {
                        json = "{success:false}";
                    }
                }
            }
            catch (Exception ex)
            {
                Log4NetCustom.LogMessage logMessage = new Log4NetCustom.LogMessage();
                logMessage.Content = string.Format("TargetSite:{0},Source:{1},Message:{2}", ex.TargetSite.Name, ex.Source, ex.Message);
                logMessage.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                log.Error(logMessage);
                json = "{success:false}";
            }
            this.Response.Clear();
            this.Response.Write(json);
            this.Response.End();
            return this.Response;
        }