Partial Caching AddCacheItemDependency problem

T

the4man

Hi all!!

I have a very stupid and simple project, just for testing, with only
one page (default.aspx), and one user control. The user control only
shows the time in an asp:literal each time the page is requested.

I want to cache the content of the user control (not the entire page),
and I want to invalidate that cache when I need. To do this, I have
added an "OuputCache" directive in my USER control. Furthermore I have
a button to invalidate the cache. This is the user control code:

protected void Page_Load(object sender, EventArgs e)
{
Literal1.Text = DateTime.Now.ToLongTimeString();
Response.AddCacheItemDependency("cachecontrol");
}
protected void Button1_Click(object sender, EventArgs e)
{
HttpContext.Current.Cache.Insert("cachecontrol", DateTime.Now);
Response.Redirect("~/Default.aspx");
}

In the global.asax, I have this:

void Application_Start(object sender, EventArgs e)
{
HttpContext.Current.Cache.Insert("cachecontrol", DateTime.Now);
}

This code is base in the examples of this article:
http://aspalliance.com/668

Well, it does not work. All my attemps to invalidate the cache of the
user control have been unsucessfull. Only if I put the "OutputCache"
directive in the default.aspx (what means cache the entire page) the
cache invalidation mechanism works.

Can anyone help me? How can I invalidate a partial-cached web page?

Thanks in advance!
 
T

the4man

Answer my self:
From microsoft.com
(http://msdn2.microsoft.com/en-us/library/t1d120ks.aspx ):

You cannot call the AddCacheItemDependency method in an ASP.NET user
control. However, in any user control that specifies the @ OutputCache
directive, you can create a CacheDependency object that describes the
cache key dependency and assign it to the Dependency property of the
UserControl object.

solution:

User control code:

protected void Page_Load(object sender, EventArgs e)
{
Literal1.Text = DateTime.Now.ToLongTimeString();
String[] dependencyKey = new String[1];
dependencyKey[0] = "cachecontrol";

BasePartialCachingControl pcc = Parent as
BasePartialCachingControl;
pcc.Dependency = new CacheDependency(null,
dependencyKey);
}

Default.aspx code (note that now the button to invalidate the cache is
outside the user control):

HttpRuntime.Cache.Insert("cachecontrol", DateTime.Now)

Global.asax:

void Application_Start(object sender, EventArgs e)
{
HttpRuntime.Cache.Insert("cachecontrol", DateTime.Now);
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,142
Latest member
arinsharma
Top