0

ユーザーが製品を購入する 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' を割り当てる必要があります

キャッシュを初めて使用するので、間違いを犯したか、間違った概念を作成している可能性があるため、この問題の解決を手伝ってください

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 に答える