MVC3 has come up with a great concept of Partial page
caching, also known as ‘Donut Hole Caching’ where entire donut represents your
Main View and the donut hole represents partial view that you would like to
cache.
Most of you might have faced the scenario of rendering HTML
as a partial view. The HTML may be static or dynamic and say you are pulling it
from third party or database. Now, each time going to database or third party
is not feasible considering performance. So the option of caching comes into
picture.
But, you may have some content on Main View you do not want
to cache. So here is the approach to cache partial content of your main view.
Let me illustrate this with a simple example:
See
above screenshot showing my MVC view. On high level, I have created one view
i.e. ‘Index’ and a partial view i.e. ‘ChildView‘. ChildView
has a content that need to be cached and it is rendered within Index view.
Basic steps of partial caching:
- move content that need to be cached in a partial view
- Create a child action in controller that will return partial view and attach OutputCache attribute to it.
- Write Content (that is going to be cached) logic in child action
- Call this child action from Main View using Html.Action
In my sample example, I created a
Main View a Label with current date time. Refer below image
ViewBag.Message in this view will contain Current Date time.Also note that I have
added a call to my child action using @Html.Action("ChildView").
Then I created a Child View also having a current date time
as shown in below image.
ViewBag.Message in this view will contain Current
Date time.
Note that you can use Html.Raw
if you are returning Html content inside ViewBag.Message
Then I created two
actions Index and ChildView
for retuning Index View and Child View respectively.
I have attached ChildActionOnly
attribute so that action will be available only for internal calls. Also to
cache Child View content, I have attached OutputCache
attribute with 10 seconds duration.
Now when I will hit the Index view from browser, for the first
time it will internally call ChildView Action and will display Current Date
Time. But within 10 seconds, if I try to re-hit the Index view, then the Current
Date Time in Index view will be updated for each hit (as I have not attached OutputCache attribute to Index action)
and Current Date Time on Child View will be constant for 10 seconds.
First hit screenshot (Note:Parent and Child Date times are same)
Second hit screenshot(Note:Parent and Child Date times are different and Child Date time is same as that of First hit Child Date time)








0 comments:
Post a Comment