Substitution Web サーバー コントロールの概要

更新 : 2007 年 11 月

Substitution コントロールにより、動的に更新した後でキャッシュ ページに統合できる領域をページ上に作成できます。

このトピックの内容は次のとおりです。

  • シナリオ

  • 背景

  • コード例

  • クラス リファレンス

シナリオ

動的コンテンツを表示する出力キャッシュ Web ページのセクションを指定するには、Substitution コントロールを使用します。Substitution コントロールは、ほとんどのコンテンツがキャッシュされるページの部分ページ キャッシュに対して、合理的な解決策を提供します。まずページ全体を出力キャッシュし、その後 Substitution コントロールを使用して、キャッシュから除外するページの部分を指定できます。キャッシュされる領域は一度だけ実行され、キャッシュ エントリの有効期限が切れるかパージされるまでキャッシュから読み取られます。動的領域はページが要求されるたびに実行されます。このキャッシュ モデルでは、セクションをカプセル化して Web ユーザー コントロールにキャッシュする必要がないため、本来は静的であるページのコードが簡略化されています。たとえば、ニュース記事などの静的コンテンツと、広告を表示する AdRotator コントロールを含むページの場合は、このキャッシュ モデルを使用すると便利です。ニュース記事は頻繁には変更されないのでキャッシュできます。ただし、ユーザーがページを要求するたびに、新しい広告を表示するとします。AdRotator コントロールはキャッシュ後の置き換えを直接サポートするため、ページがキャッシュされているかどうかにかかわらず、ページがポストバックされるたびに新しい広告を表示します。

ページのトップへ

背景

ASP.NET ページがキャッシュされると、既定では、ページの出力全体がキャッシュされます。最初の要求時には、ページが実行され、その出力がキャッシュされます。以降の要求では、要求がキャッシュから処理され、ページ上のコードは実行されません。

ASP.NET ページをキャッシュするけれども、要求ごとにページの選択した部分のみを更新するような場合もあります。たとえば、ページの大部分をキャッシュするけれども、ページ上の時間依存情報のみを動的に更新できるようにする場合などです。

Substitution コントロールを使用すると、キャッシュ ページに動的コンテンツを挿入できます。Substitution コントロールは、マークアップをレンダリングしません。代わりに、開発者がコントロールをページ上のメソッドや親ユーザー コントロールにバインドします。開発者が、ページに挿入する情報を返す静的メソッドを作成します。Substitution コントロールによって呼び出されるメソッドは、次の基準を満たしている必要があります。

  • Visual Basic で共有される静的メソッドである必要があります。

  • HttpContext 型のパラメータを受け取る必要があります。

  • アクセサは、String の型の値を返す必要があります。

Substitution コントロールは、ページ上の他のコントロールからアクセスできません。つまり、他のコントロールの値を調べたり、変更したりすることはできません。ただし、コードは渡されたパラメータを使用して現在のページ コンテキストにアクセスできます。

ページが実行されると、Substitution コントロールはメソッドを呼び出し、ページ上の Substitution コントロールの代わりにメソッドからの戻り値を使用します。

ページのトップへ

コード例

Substitution コントロールを使用してキャッシュ ページ上で動的に更新されるコンテンツを作成する方法を、次の例に示します。ページの Load イベントのコードは、現在の時刻を使用して Label コントロールを更新します。ページのキャッシュ期間は 60 秒に設定されているため、この 60 秒の期間中にページが複数回要求されても、Label コントロールのテキストは変更されません。ページの Substitution コントロールは静的メソッド GetTime を呼び出し、このメソッドが現在の時刻を文字列として返します。ページが更新されるたびに、Substitution コントロールによって表示される値が更新されます。

<%@ Page Language="VB" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>

<script runat="server">
    Sub Page_Load()
        Label1.Text = DateTime.Now.ToString()
    End Sub

    Public Shared Function GetTime(ByVal context As HttpContext) _
            As String
        Return DateTime.Now.ToString()
    End Function
</script>

<html>
<head runat="server"></head>
<body>
    <form id="form1" runat="server">
    <div>
    <p>
    <asp:Label runat="server" ID="Label1" />
    </p>
    <p>
    <asp:Substitution runat="server" 
        ID="Substitution1" 
        MethodName="GetTime" />
    </p>
    <p>
    <asp:Button runat="server" ID="Button1" Text="Submit"/>
    </p>
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>

<script runat="server">
    void Page_Load()
    {
        Label1.Text = DateTime.Now.ToString();
    }
    
    public static String GetTime(HttpContext context)
    {
      return DateTime.Now.ToString();
    }
</script>
<html>
<head runat="server"></head>
<body>
    <form id="form1" runat="server">
    <div>
    <p>
    <asp:Label runat="server" ID="Label1" />
    </p>
    <p>
    <asp:Substitution runat="server" 
        ID="Substitution1" 
        MethodName="GetTime" />
    </p>
    <p>
    <asp:Button runat="server" ID="Button1" Text="Submit"/>
    </p>
    </div>
    </form>
</body>
</html>

ページのトップへ

クラス リファレンス

Substitution コントロールに関連するクラスの一覧を次の表に示します。

メンバ

説明

Substitution

コントロールのメイン クラスです。

ページのトップへ

参照

概念

キャッシュ ページの動的な部分更新