我使用的是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方法之外的任何其他方式?感谢
答案 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是下拉列表所需的数据。