2010-08-26 133 views
0

我有一個調用呈現動作amaster頁:ASP.NET MVC 2控制器不緩存

<% Html.RenderAction("CategoryList", "Category", new { selectedCategoryId = Model.selectedCategoryId }); %> 

和動作的樣子:

[ChildActionOnly] 
[OutputCache(Duration = 10, VaryByParam = "none")] 
public ActionResult CategoryList(int? selectedCategoryId) 
{ 

    CategoryList cl = CategoryManager.GetList(); 
    if (selectedCategoryId.HasValue) 
     CategoryManager.SetSelectedCategory(cl, selectedCategoryId.Value); 
    return PartialView(cl); 
} 

但是當我運行SQL事件探查器,我看到的是, GetList()查詢總是被調用,這意味着該操作沒有被緩存。

任何想法我做錯了什麼?

謝謝!

回答

1

這是一個子操作,意味着它只是最終HTML的一部分,不能被緩存。用於緩存HTML結帳的片段this blog post

+0

我驚訝,那麼,什麼是其他人用緩存childactions做什麼? – TomerMiz 2010-08-27 10:23:56

+1

@ user423649,他們沒有使用ChildAction。他們不支持緩存**。 – 2010-08-27 11:04:13

0

其簡單,使用OutputCacheAttribute。

[OutputCache(Duration=60, VaryByParam="None")] 
public ActionResult CacheDemo() { 
    return View(); 
} 

保重,Ragims

+0

嗨, 看看我的問題中的代碼,我有[OutputCache(Duration = 10,VaryByParam =「none」)],但它會被忽略,因爲動作是使用renerAction調用的, 還有其他想法嗎? – TomerMiz 2010-08-26 20:47:37

+0

,並且如果您嘗試設置持續時間以使值爲30sek。 – 2010-08-27 08:09:06

+0

確實<%= Html.RenderAction而不是<%Html.RenderAction進行了任何更改? – 2010-08-27 08:10:10