ASP.NET Tutorial/Cache/Post Cache
NewsRotator control uses the WriteSubstitution() when displaying a random news item.
<source lang="csharp">
If you use this control in a page that has been output cached, the NewsRotator control continues to display news items randomly. using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections.Generic; namespace myControls {
public class NewsRotator : WebControl { public static string GetNews(HttpContext context) { List<String> news = new List<string>(); news.Add("Martians attack!"); news.Add("Moon collides with earth!"); news.Add("Life on Jupiter!"); Random rnd = new Random(); return news[rnd.Next(news.Count)]; } protected override void RenderContents(HtmlTextWriter writer) { Context.Response.WriteSubstitution(GetNews); } }
}</source>
Use post-cache substitution programmatically by using the Response.WriteSubstitution() method.
<source lang="csharp">
<%@ Page Language="C#" %> <%@ OutputCache Duration="15" VaryByParam="none" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
public static string GetTime(HttpContext context) { return DateTime.Now.ToString("T"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Show WriteSubstitution</title>
</head> <body>
<form id="form1" runat="server">
The cached time is: <%= DateTime.Now.ToString("T") %>
The substitution time is: <% Response.WriteSubstitution(GetTime); %>
</form>
</body> </html></source>
Using Post-Cache Substitution
<source lang="csharp">
The MethodName property accepts the name of a method defined in the page. The method must be a shared (static) method because an instance of the class is not created when the page is output cached.
<%@ Page Language="C#" %> <%@ OutputCache Duration="15" VaryByParam="none" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
public static string GetTime(HttpContext context) { return DateTime.Now.ToString("T"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Substitution Control</title>
</head> <body>
<form id="form1" runat="server">
The cached time is: <%= DateTime.Now.ToString("T") %>
The substitution time is: <asp:Substitution id="Substitution1" MethodName="GetTime" Runat="server" />
</form>
</body> </html></source>