ユーザーが製品を購入する e コマース Web サイトを開発しています。私はキャッシュを作成し、アイテムをキャッシュに追加しました。追加ボタンを使用して製品のユーザーコントロールを作成しました(アイテムをカートに追加する製品を購入するため)。追加ボタンは次のメソッドを呼び出します
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' を割り当てる必要があります
コントロールが現在のメソッドを離れる前に、出力パラメーター「依存関係」を割り当てる必要があります
制御が現在のメソッドを離れる前に、出力パラメーター 'absoluteExpiration' を割り当てる必要があります
制御が現在のメソッドを離れる前に、出力パラメータ 'slidingExpiration' を割り当てる必要があります
キャッシュを初めて使用するので、間違いを犯したか、間違った概念を作成している可能性があるため、この問題の解決を手伝ってください