2011-11-07 6 views
3

パーシャルビューで別のOutputCacheプロパティを設定しようとすると、PartialViewキャッシュが親出力キャッシュ期間を使用していることがわかります。次のコードで、私はれるrenderPartialが短くOutputCache期間につながることを望んでいるだろうが、私はそれが(10秒)DateTime.Now中を示すこの単純な例ではMVC3パーシャルビューOutputCacheを親ビューでオーバーライドする

public class HomeController : Controller 
{ 
    [OutputCache(Duration=10, VaryByParam="none")] 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Time now: "+ DateTime.Now.ToString(); 

     return View(); 
    } 

    [ChildActionOnly] 
    [OutputCache(Duration=5, VaryByParam="none")] 
    public PartialViewResult LogonPartial() 
    { 
     return PartialView("_LogOnPartial"); 
    } 
} 

親ビューと同じであることを見つけますPartialViewは、親ビューがフラッシュするまで、PartialViewがキャッシュをクリアしないことが分かりました。私は、パーシャルビューのキャッシュが5秒ごとにキャッシュされることを望んでいました。 PartialViewでOutputCacheを使用している例を見ると、キャッシュはPartialViewで実装されているビューではなく実装されています。これがMVC3でのキャッシュの制限であるのか、同じページで異なるキャッシュメカニズムを扱う別の方法があるのか​​誰にも分かりますか?前もって感謝します!

答えて

3

親ビュー全体を10秒間キャッシュしました。これは、これらの10秒間に子アクションがヒットすることはなく、ビュー全体がキャッシュから提供されることを意味します。子アクションのキャッシュが5秒後に期限切れになっても、まだヒットしません。

ASP.NET MVC 3では、ドーナツ穴のキャッシュのみがサポートされています(子アクションのOutputCache属性を使用してページの一部をキャッシュします)。ドーナツキャッシングはサポートされていません(このキャッシュからキャッシュされたページの一部を除外します)。

+0

ダーリンに感謝します。私はこれを回避する手段があることを期待していましたが、その答えはかなり意味があります。今度はドーナツが欲しい! – likestoski

+0

出力キャッシュについてのベストプラクティスは何ですか?このシナリオでは、ページ全体をキャッシュすると、ログアウトリンクにヒットしたときに_LogOnPartialが更新されなくなります。 – likestoski

関連する問題