Asp.net mvc 3 在MVC razor中缓存dropbox项。怎么做?

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

如何在MVC中缓存下拉列表中的项目和值

有没有办法做到这一点

我是在控制器里做的

示例代码是

    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
。这样,即使由于某种原因尚未在缓存中,也应该返回一个值。