Asp.net mvc 3 在MVC razor中缓存dropbox项。怎么做?
如何在MVC中缓存下拉列表中的项目和值 有没有办法做到这一点 我是在控制器里做的 示例代码是Asp.net mvc 3 在MVC razor中缓存dropbox项。怎么做?,asp.net-mvc-3,outputcache,Asp.net Mvc 3,Outputcache,如何在MVC中缓存下拉列表中的项目和值 有没有办法做到这一点 我是在控制器里做的 示例代码是 public ActionResult Index() { RegionTasks regionTasks = new RegionTasks(); ViewBag.Region = GetRegions();} 我的控制器的功能如下 [OutputCache(Duration = 10, Location = System.Web.UI.Output
public ActionResult Index()
{
RegionTasks regionTasks = new RegionTasks();
ViewBag.Region = GetRegions();}
我的控制器的功能如下
[OutputCache(Duration = 10, Location = System.Web.UI.OutputCacheLocation.Server)]
private IEnumerable<SelectListItem> GetRegions()
{
RegionTasks regionTasks = new RegionTasks();
return regionTasks.GetRegions();
}
[OutputCache(持续时间=10,位置=System.Web.UI.OutputCacheLocation.Server)]
私有IEnumerable GetRegions()
{
RegionTasks RegionTasks=新RegionTasks();
返回regionTasks.GetRegions();
}
我已经测试过了,但它没有为区域缓存项目
如何才能做到这一点?在控制器操作上使用
OutputCache
属性来缓存结果输出。它对其他方法完全没有影响
如果要缓存自定义对象,可以使用HttpContext.cache
:
private IEnumerable<SelectListItem> GetRegions()
{
var regionTasks = HttpContext.Cache["regions"] as IEnumerable<SelectListItem>;
if (regionTasks == null)
{
// nothing in the cache => we perform some expensive query to
// fetch the result
regionTasks = new RegionTasks().GetRegions();
// and we cache it so that the next time we don't need to perform
// the query
HttpContext.Cache["regions"] = regionTasks;
}
return regionTasks;
}
private IEnumerable GetRegions()
{
var regionTasks=HttpContext.Cache[“regions”]作为IEnumerable;
if(regionTasks==null)
{
//缓存中没有任何内容=>我们执行一些昂贵的查询
//取得结果
regionTasks=新建regionTasks().GetRegions();
//我们缓存它,以便下次不需要执行
//询问
HttpContext.Cache[“regions”]=regionTasks;
}
返回区域任务;
}
regiontask
现在缓存在regions
键下,可以从ASP.NET应用程序中的任何位置访问,该应用程序可以访问HttpContext.Cache
Darin也是对的,我曾经在服务器上存储了X分钟以下代码
private IEnumerable<SelectListItem> GetGlobalUrlRegion(string profileName)
{
string cacheKey = "cacheUrlRegion";
RegionTasks regionTasks = RegionTasks.CreateRegionTasks();
IEnumerable<SelectListItem> regionUrlList = HttpContext.Cache[cacheKey] as IEnumerable<SelectListItem>;
if (regionUrlList == null)
{
var regionObject = regionTasks.GetRegions(profileName);
var cTime = DateTime.Now.AddMinutes(int.Parse(System.Configuration.ConfigurationSettings.AppSettings["GlobalCacheDurationInMin"].ToString()));
var cExp = System.Web.Caching.Cache.NoSlidingExpiration;
var cPri = System.Web.Caching.CacheItemPriority.Normal;
regionUrlList = regionObject;
HttpContext.Cache.Insert(cacheKey, regionObject, null, cTime, cExp, cPri, null);
}
return regionUrlList;
}
private IEnumerable GetGlobalUrlRegion(字符串profileName)
{
字符串cacheKey=“cacheUrlRegion”;
RegionTasks RegionTasks=RegionTasks.CreateRegionTasks();
IEnumerable regionUrlList=HttpContext.Cache[cacheKey]作为IEnumerable;
if(regionUrlList==null)
{
var regionObject=regionTasks.GetRegions(profileName);
var cTime=DateTime.Now.AddMinutes(int.Parse(System.Configuration.ConfigurationSettings.AppSettings[“GlobalCacheDurationInMin”].ToString());
var cExp=System.Web.Caching.Cache.NoSlidingExpiration;
var cPri=System.Web.Caching.CacheItemPriority.Normal;
regionUrlList=regionObject;
Insert(cacheKey,regionObject,null,cTime,cExp,cPri,null);
}
返回区域列表;
}
可能重复您为什么再次问完全相同的问题?可能OutputCache
仅对操作结果有效,并且您的持续时间设置为10秒。干杯,请投票。我(使用类似的实现)遇到的一个问题是,正在设置与regionUrlList
等效的值,但我似乎无法在第一次运行时读取该值,从而导致异常。但是,在第二次运行时,它确实跳过了if
块,并返回了正确的值。我的方法是在if
块之前将regionObject
初始化为null
,然后对return使用类似的方法-return(regionObject!=null)?regionObject:regionUrlList
。这样,即使由于某种原因尚未在缓存中,也应该返回一个值。