2011-07-18 8 views
0

私はAsp.Net MVCアプリケーションを使用しています。ポップアップドロップダウンリスト - 複数のデータベース呼び出しを避ける

次のコードでは、ドロップダウンにデータを入力する2つのデータベース呼び出しを回避するにはどうすればよいですか?

[HttpGet] 
public ActionList Upload(){ 

// do something 
//For populating drop downlist take data from db 

Return View("Upload"); 

} 

[HttpPost] 
public ActionList Upload(){ 

//do something 
//again take data from db for populating dropdown 

Return View("Upload"); 

} 

jQuery ajaxメソッド以外の方法はありますか?ありがとう

答えて

5

データのサイズと頻度は変わる可能性がありますが、一般的な解決方法はHttpContextのCacheプロパティを使用することです。

public List<items> GetDropdownlistItems() 
{ 
    string cacheKey = "dropdownlistItems"; 

    if (HttpContext.Current.Cache[cacheKey] != null) 
    { 
     return (List<items>)HttpContext.Current.Cache[cacheKey]; 
    } 

    var items = GetItemsFromDatabase(); 

    HttpContext.Current.Cache.Insert(cacheKey, items, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration); 

    return items; 
} 
+0

ありがとう、私はこれを試してみるよ。 – Lamps

+0

こんにちは...私のドロップダウンには約50の項目が含まれています。キャッシュを保存してもよろしいですか?パフォーマンスに問題はありますか? – Lamps

+0

あまりにも悪くないはずです。ガベージコレクタがそれ以上のメモリを必要とすると判断した場合、キャッシュから最初にアイテムを削除する可能性がありますが、その動作はシステムによって管理されるため、心配する必要はありません。 –

1

私はこのようにほとんど変更されないデータをキャッシュする傾向があります。

チェックアウトEntLibs Caching Application Blocks

最初に使用するときにすべてのデータをキャッシュにロードし、有効にする変更の速さに応じて有効期限を設定できます。 MYDATAは、ドロップダウンのために必要なデータである

 MyData myData = null; 
     myData = (MyData)cacheManager.GetData("myData"); 

     if (myData == null) 
     { 
      myData = dataProvider.GetData(); 
      cacheManager.Add("myData", myData, CacheItemPriority.Normal, null, timeToExpire); 
     } 

     return myData; 

基本的には、お使いのコントローラと、このようなコードの何かを実行するデータベースとの間の層を追加します。

+0

ありがとう、私はこれを試してみる。 – Lamps

関連する問題