Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Caching ChildActions using cache profiles won't work?

I'm trying to use cache profiles for caching child actions in my mvc application, but I get an exception: Duration must be a positive number.

My web.config looks like this:

<caching>
      <outputCache enableOutputCache="true" />
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="TopCategories" duration="3600" enabled="true" varyByParam="none" />
        </outputCacheProfiles>
      </outputCacheSettings>
</caching>

And my child action something like this:

[ChildActionOnly]
[OutputCache(CacheProfile = "TopCategories")]
//[OutputCache(Duration = 60)]
public PartialViewResult TopCategories()
{
    //...
    return PartialView();
}

Inside a view I just call @Html.RenderAction("TopCategories", "Category")

But I get an error: Exception Details: System.InvalidOperationException: Duration must be a positive number.

If I don't use cache profile it works. Have an idea what's the problem?

like image 863
frennky Avatar asked Jan 18 '11 21:01

frennky


1 Answers

I did some digging on a related question and looking at mvc 3 source, they definitely don't support any attribute other than Duration and VaryByParam. The main bug with their current implementation is that if you don't supply either one of these you will get an exception telling you to supply that, instead of an exception say that what you tried to use is not supported. The other major issue was that they will cache even if you turn off caching in the web.config, which seems really lame and not right.

The biggest issue I had with it all is that they are using the same attribute which works in both views and partial views, but in reality it should probably be 2 different attributes since the partial view is so limited and behaves a lot differently, at least in it's current implementation.

like image 172
Greg Roberts Avatar answered Nov 04 '22 13:11

Greg Roberts