2011-06-29 1 views
4

MVC3プロジェクトにアプリケーションレベルのキャッシュが必要です。ASP.NET MVC3のキャッシュデータが変更されましたか?

私は、コントローラにこのようなものを使用したい:System.Web.Caching.Cacheは 『タイプ』である」として、キャッシュ[「foo」が]コンパイルされませんので

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はクラスですが、コントローラのSession ["asdf"]のように使用されているネット上の例がかなりあります。

私は間違っていますか?

答えて

11

コントローラにはSessionという名前のプロパティがありますが、Cacheというプロパティはありません。 Cacheオブジェクトを取得するには、HttpRuntime.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; 
} 
+0

実際にあなたの例は私の文字と同じですが、答えが私を助けました。 – SoonDead

0

は、データをキャッシュする 等のMVCでの新しい方法があります - あなたはまた、あなたのweb.configファイル でこれを指定することができ [OutputCache(期間= 3)] は、ここに見られるように: あなたはMVC

  • に開発している場合は、あなたが考えるかもしれませんキャッシュするために、以前の方法を使用したい場合http://dotnetcodr.com/2013/02/07/caching-infrastructure-in-mvc4-with-c-caching-controller-actions/ これは、しかし、はるかに効率的かつ容易に利用可能である System.Web.HttpContext.Current.Cache["variable"] = datasetresultまたはlistObjectResult つまり、 System.Web.HttpContext.Current.Cache ["POSSEData"] = MyDevObjBO.GetListOfObjects();

は、その後、必要に応じて再割り当て: 即ち、 grdViewStuff.DataSource =(リスト)System.Web.HttpContext.Current.Cache [ "POSSEData"]。

+0

あなたは "新しい方法"で何を望んでいますか? – SoonDead

関連する問題