2010-08-26 130 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