2010-08-26 5 views
0

Je amaster la page qui appelle l'action de rendre:contrôleur ASP.NET MVC 2 pas mises en cache

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

et l'action ressemble à:

[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); 
} 

Mais quand je lance SQL profileur je vois que la La requête GetList() est toujours appelée, ce qui signifie que l'action n'est pas mise en cache.

Une idée de ce que je fais mal?

Merci!

Répondre

1

Il s'agit d'une action enfant qui signifie qu'elle ne fait partie que du code HTML final et ne peut pas être mise en cache. Pour mettre en cache des fragments de votre commande HTML this blog post.

+0

Je suis surpris, alors que tout le monde est en train de faire d'autre avec childactions de mise en cache? – TomerMiz

+1

@ user423649, ils n'utilisent pas ChildActions. La mise en cache n'est pas ** prise en charge pour eux. –

0

c'est facile, utilisez OutputCacheAttribute.

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

Prenez soin, Ragims

+0

Salut, Regardez le code dans ma question, j'ai [OutputCache (Duration = 10, VaryByParam = "aucun")], mais il est ignoré depuis que l'action est appelée en utilisant renerAction, Une autre idée? – TomerMiz

+0

et si vous essayez de définir la durée pour évaluer jusqu'à 30sek. –

+0

fait <% = Html.RenderAction au lieu de <% Html.RenderAction apporte-t-il des modifications? –

Questions connexes