0

我正在开发一个电子商务网站,用户将在其中购买产品。因为我已经做了一个缓存并将项目添加到缓存中。我已经使用添加按钮对产品进行了用户控制(用于购买将商品添加到购物车的产品)。添加按钮将调用休闲方法

public void itemAddTocart(string[] arg, int itemQty)
        {
            CartDT=(DataTable)Cache["Cart"];
            if (CartDT==null)
            {
                DataTableColumn();
            }
            DataRow dr = CartDT.NewRow();
            dr[0] = arg[0];  //Product_Name
            dr[1] = arg[1]; //Product_ID
            dr[2] = itemQty; //OrderQTY
            dr[3] = Math.Round(Convert.ToDouble(arg[2])).ToString(); //Price
            dr[4] = (Double.Parse(arg[2]) * itemQty).ToString(); // calculate total price
            dr[5] = 0;
            dr[6] = "default";
            dr[7] = Convert.ToInt32(arg[3]);
            dr[8] = arg[4];
            dr[9] = arg[5];
            dr[10] = arg[6];

                dr[11] = Convert.ToInt32(Session["MinorderAmount"].ToString());

            CartDT.Rows.Add(dr);
            //CartDT.DefaultView.Sort = "SuppEmailID";
            Cache["cart"] = CartDT;


        }

但是在将项目添加到购物车后必须向用户显示购物车中的更改,因为我刷新了整个页面,因此页面加载中的代码将填充购物车,这将需要很长时间,这对用户这样做不利,因为此事件是从用户控件触发的,因此我无权访问页面控件

所以我决定调用将在使用CacheItemUpdateCallback 委托更新缓存时触发的方法

这将被添加为

创建代理

CacheItemUpdateCallback CacheItemUpdateCallbackDel=new CacheItemUpdateCallback (CacheItemUpdateCallbackMethod);

添加它

 Cache.Insert("ProductData", PD, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemUpdateCallbackDel);

方法

public void CacheItemUpdateCallbackMethod(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration)
        {
             setCartSuppWise();
        }

但它给了我错误

必须在控制离开当前方法之前分配 out 参数“expensiveObject”

必须在控制离开当前方法之前分配 out 参数“依赖项”

必须在控制离开当前方法之前分配 out 参数“absoluteExpiration”

必须在控制离开当前方法之前分配 out 参数 'slidingExpiration'

我是第一次使用缓存,所以我可能犯了错误或可能犯了错误的概念,所以请帮我解决这个问题

4

1 回答 1

0

CacheItemUpdateCallback 指定“out”参数。必须始终在函数返回之前设置输出参数。“您应该提供新的缓存项以及在刷新缓存项时使用的可选过期和依赖项值。”。

http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemupdatecallback(v=vs.110).aspx

public void CacheItemUpdateCallbackMethod(string key, CacheItemUpdateReason reason, out       object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration)
{
    expensiveObject = your_object;
    dependency = ...
    absoluteExpiration = ...
    slidingExpiration = ...
}
于 2013-11-08T13:48:20.350 回答