填充下拉列表 - 避免多个数据库调用

时间:2011-07-18 11:01:06

标签: c# asp.net-mvc

我使用的是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方法之外的任何其他方式?感谢

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我倾向于缓存很少改变的数据,例如这个。

结帐EntLibs Caching Application Blocks

您可以在首次使用时将所有数据加载到缓存中,并根据您希望数据库中的更改生效的速度来设置到期时间。

基本上,在Controller和数据库之间添加一个层,运行如下代码:

        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是下拉列表所需的数据。