Reputation: 311
I want to apply output cache programmatically to a particular control. But when I'm using this code, it stores all the page and other user control in cache output.
if (Session["id"] != null)
{
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
}
Upvotes: 3
Views: 2226
Reputation: 32333
HttpResponse.Cache
property gets caching policy (such as expiration time, privacy settings, and vary clauses) of a whole web page. That's why the code above caches the whole web page.
To cache your user control you could use PartialCachingAttribute
. Is says that your control supports fragment caching. And then programmatically change the necessary caching properties through UserControl.CachePolicy
property:
[PartialCaching(0)]
public partial class MyControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["id"] != null)
{
this.CachePolicy.Duration = TimeSpan.FromSeconds(60);
}
}
}
Additional information could be found in the Caching Portions of an ASP.NET Page articke on MSDN.
Upvotes: 7