在ASP.NET-MVC3中缓存数据有什么变化吗?

时间:2011-06-29 11:34:17

标签: asp.net-mvc-3 caching

我需要在我的MVC3项目中使用应用程序级缓存。

我想在控制器中使用这样的东西:

using System.Web.Caching;    

protected IMyStuff GetStuff(string stuffkey)
{
    var ret = Cache[stuffkey];
    if (ret == null)
    {
        ret = LoadStuffFromDB(stuffkey);
        Cache[stuffkey] = ret;
    }
    return (IMyStuff)ret;
}

这会失败,因为Cache [“foo”]不能编译为“System.Web.Caching.Cache是​​'type',而是像'variable'一样使用。”

我看到Cache是​​一个类,但是在控制器中像Session [“asdf”]一样使用它时,网上有很多例子,就像它是一个属性一样。

我做错了什么?

2 个答案:

答案 0 :(得分:11)

控制器中有一个名为Session的属性,但没有名为Cache的属性。 您应该使用HttpRuntime.Cache静态属性来获取Cache对象。 例如:

using System.Web.Caching;    

protected IMyStuff GetStuff(string stuffkey)
{
    var ret = HttpRuntime.Cache[stuffkey];
    if (ret == null)
    {
        ret = LoadStuffFromDB(stuffkey);
        HttpRuntime.Cache[stuffkey] = ret;
    }
    return (IMyStuff)ret;
}

答案 1 :(得分:0)

MVC中有更新的方法来缓存数据 喜欢 - [的OutputCache(持续时间= 3)] 您也可以在web.config文件中指定它 如下所示: http://dotnetcodr.com/2013/02/07/caching-infrastructure-in-mvc4-with-c-caching-controller-actions/ 如果您正在开发MVC

,这将更加高效和随时可用
  • 但是,如果您希望使用以前的方法进行缓存,可以考虑 System.Web.HttpContext.Current.Cache["variable"] = datasetresultlistObjectResult 即,     System.Web.HttpContext.Current.Cache [“POSSEData”] = MyDevObjBO.GetListOfObjects();

然后根据需要重新分配: 即,         grdViewStuff.DataSource =(List)System.Web.HttpContext.Current.Cache [“POSSEData”];