2011-11-07 44 views
3

當試圖在局部視圖上設置不同的OutputCache屬性時,我發現PartialView緩存正在使用父級輸出緩存持續時間。用下面的代碼我希望的RenderPartial將導致較短的OutputCache持續時間,但是我發現,這是相同的父視圖(10秒)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"); 
    } 
} 

與表示DateTime.Now在這個簡單的例子部分視圖我發現部分視圖不清除它的緩存,直到父視圖刷新他的位置,我希望部分視圖每5秒鐘清除一次緩存(而不是每10秒鐘就像父視圖一樣)。通過我在PartialView中看到的使用OutputCache的示例,緩存在PartialView而不是包含視圖上實現。有誰知道這是否是MVC3中的緩存限制,或者是否有另一種方法來處理同一頁上的不同緩存機制?提前致謝!

回答

3

您已將整個父視圖緩存了10秒。這意味着在這10秒鐘內,子動作不會被觸發,整個視圖將從緩存中提供。即使子動作的緩存在5秒後過期,它仍然不會被擊中。

在ASP.NET MVC 3中,只支持甜甜圈空洞緩存(通過在子操作中使用OutputCache屬性來緩存頁面的一部分)。不支持甜甜圈緩存(從緩存中排除部分緩存頁面)。

+0

感謝達林,我曾希望有一種解決方法,但這個答案很有意義。達尼特現在我想要甜甜圈! – likestoski

+0

關於輸出緩存,有哪些「最佳實踐」?我已經給出了這種情況,緩存整個頁面會導致_LogOnPartial在您點擊註銷鏈接時不刷新。 – likestoski