ASP.NET Tutorial/Cache/Post Cache

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>