2011-07-18 57 views
0

我正在使用Asp.Net MVC應用程序。填充下拉列表 - 避免多個數據庫調用

在下面的代碼中,如何避免兩個數據庫調用來填充下拉列表?

[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 = null; 
     myData = (MyData)cacheManager.GetData("myData"); 

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

     return myData; 

哪裏myData的是,你需要一個下拉列表中的數據:

基本上,你的控制器和數據庫,運行代碼這樣的事情之間添加一個圖層。

+0

謝謝,我會試試這個。 – Lamps