ASP.NET Tutorial/Cache/Post Cache

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

NewsRotator control uses the WriteSubstitution() when displaying a random news item.

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);
        }
    }
}


Use post-cache substitution programmatically by using the Response.WriteSubstitution() method.

<%@ 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">
    <div>
    The cached time is: <%= DateTime.Now.ToString("T") %>
    <hr />
    The substitution time is:
    <% Response.WriteSubstitution(GetTime); %>
    </div>
    </form>
</body>
</html>


Using Post-Cache Substitution

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">
    <div>
    The cached time is: <%= DateTime.Now.ToString("T") %>
    <hr />
    The substitution time is:
    <asp:Substitution
        id="Substitution1"
        MethodName="GetTime"
        Runat="server" />
    </div>
    </form>
</body>
</html>