views:

501

answers:

1

Is there a way to programmatically invalidate portions of the ASP.NET MVC output cache? What I would like to be able to do is, if a user posts data that changes what would be returned from a cached action, be able to invalidate that cached data.

Is this even possible?

Thanks, Matthew

+5  A: 

One way is to use the method :

HttpResponse.RemoveOutputCacheItem("/Home/About");

Another way is described here : http://aspalliance.com/668

I think you could implement the second method by using a method level attribute for every action that you want and just add to it the string representing the key. That's if I understood your question.

Edit: Yes the asp.net mvc OutputCache is just a wrapper .

If you're using varyByParam="none" then you just invalidate "/Statistics" - that's if / are querystring values. This will invalidate all versions of the page

I did a quick test and if you add varyByParam="id1" and then create multiple versions of the page - if you say invalidate invalidate "/Statistics/id1" it will invalidate just that version. But you should do further tests.

sirrocco
is the MVC OutputCache attribute just a wrapper around the usual ASP.NET output caching? So, let's say I wanted to invalidate the results for an action called "/Statistics/<id1>/<id2>" I would just call HttpResponse.RemoveOutputCacheItem("/Statistics/<id1>/<id2>")? FWIW, The "VaryByParams" property of the attribute is "None." Am I using that property correctly?
Matthew Belk