ASP.NET MVC 3 (final) was released today. When this version was in its infancy I remember reading on codeplex that donut caching was being considered. Does anyone know if this made it into V3? I cannot seem to find any information so I can only (sadly) assume that it didn't happen.
-
Let me get this right, donut caching has been available since .NET 2. MVC2 supports it. MVC3 drops support?! What on earth for? With no alternatives available other than writing it all yourself? Gah, that can't be right. – batkuip Nov 12 '11 at 23:37
4 Answers
Yes, it is. Scott Gu blogged about it:
In addition to supporting full page output caching, ASP.NET MVC 3 also supports partial-page caching – which allows you to cache a region of output and re-use it across multiple requests or controllers. The [OutputCache] behavior for partial-page caching was updated with RC2 so that sub-content cached entries are varied based on input parameters as opposed to the URL structure of the top-level request – which makes caching scenarios both easier and more powerful than the behavior in the previous RC.
UPDATE:
Out of the box only donut hole caching is supported in ASP.NET MVC 3. This allows you to cache a small portion of the page by using the [OutputCache]
attribute on a child action. Donut caching which allows for excluding portions of a page that has been cached is not supported. Response.WriteSubstitution
doesn't work since ASP.NET MVC 2. Here is a good article which explains the different caching options available in ASP.NET MVC 3.
UPDATE 2:
Here's a great article which illustrates how donut caching could be enabled in ASP.NET MVC 3.

- 1,023,142
- 271
- 3,287
- 2,928
-
2This is donut hole caching, not donut caching. Donut caching is not supported in-box in MVC 3. – Levi Jan 13 '11 at 23:18
-
@Darin, Thanks for the update. An excellent article indeed. I read somewhere that the goal is to include donut caching in MVC 4. not sure whether to hold out or use this nuget package... – JP. Dec 05 '11 at 22:01
I found a NuGet package MvcDonutCaching mentioned by Denis Huvelle which solves the problem for 3 & 4 - but I haven't tested it.

- 616
- 5
- 16
Here's a slightly more detailed example from Scott, using Razor syntax.

- 19,068
- 5
- 80
- 116
-
1Great link but not sure if this is donut hole caching, since the page isn't cached but the "donut hole" is. I don't want to cache parts of my page, but instead cache the page and leave parts dynamic. It's a nuance, but one that should be clarified. – Khalid Abuhakmeh Jul 27 '11 at 16:47
Donut Caching (yes, the real thing) is available as part of my 'speed-lib' for MVC: Moth. Works in both ASP.NET MVC 2 and MVC 3.
Docs are at the wiki, and examples are in the Mvc3.Demo folder

- 26,598
- 9
- 83
- 120