2017-11-03 3 views
0

こんにちは、私は以下の特定のページで複数回呼び出すと、午前1つのユーザーコントロールを持っているで複数のデータを格納するための方法として、複数回呼び出され今では、キャッシュのC#

private void BindMenu() 
     { 
      string menuContent = (string)Cache[_CacheKey]; 
      if (string.IsNullOrEmpty(menuContent)) 
      {     
       menuContent = GenerateMenu(CategoryId, 1);    
       Cache.Add(_CacheKey, menuContent, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 
      } 
      phMenu.Text = menuContent; 
     } 

バインドメニューのコードです1,2,3のような別のカテゴリIDを渡しています。

しかし、1のカテゴリIDが渡されると、キャッシュにデータが格納され、同じページでユーザーの制御が繰り返されると、常にキャッシュに格納されたデータが表示されます。

私はキャッシュロジックを削除しようとしましたが、データが反映されているのは私の結果によるが、ページの読み込み時間が増えています。

ヘルプが必要ですか? Webユーザーコントロールにパラメータを渡すためにキャッシュを使用し

解決される問題

private void BindMenu() 
     { 
      string menuContent = (string)Cache[_CacheKey+Convert.ToString(CategoryId)]; 
      if (string.IsNullOrEmpty(menuContent)) 
      {     
       menuContent = GenerateMenu(CategoryId, 1);    
       Cache.Add(_CacheKey+Convert.ToString(CategoryId), menuContent, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 
      } 
      phMenu.Text = menuContent; 
     } 
+0

あなたはキャッシュのためにどのようなキーを使用していますか? –

+0

私は決してキャッシュを使用していませんでした。 キャッシュキーが違う場合はキャッシュキーが一致するようにするために、キャッシュキーは同じ@ – Xtremcool

+0

@PeterBonsでなければなりません。 – Xtremcool

答えて

0

は悪い考えです。

のプロパティを使用する必要があります。

public int変数は、ユーザーコントロールのコードで宣言し、そのset関数では、valueを渡します。背後にあるユーザーコントロールのコードで

:呼び出し元で

// Declare a public property 
public int CategoryId 
{ 
    set 
    { 
     // use the value keyword to get the value passed from the main page: 
     if (string.IsNullOrEmpty(menuContent)) 
     {     
      menuContent = GenerateMenu(value, 1); 
      phMenu.Text = menuContent;    
     } 
    } 
} 

(含む)ページのコード:

UserControl1.CategoryId = 1; 
UserControl2.CategoryId = 2; 
.... 
+0

私はキャッシュを修正しようとしましたが、うまくいきましたが、読み込み時間が増えています。フェッチされたレコードはほぼ500から1000です – Xtremcool

関連する問題