Substitutionコントロール---キャッシュ・ページを動的に更新する部分


ASPをキャッシュする.NETページの場合、デフォルトではそのページのすべての出力がキャッシュされます.最初のリクエストでは、ページが実行され、出力がキャッシュされます.後続のリクエストについては、キャッシュによって完了し、ページのコードは実行されません.
場合によってはASPをキャッシュする場合がある.NETページですが、各リクエストに応じてページで選択した部分を更新する必要があります.たとえば、ページの大部分をキャッシュする場合がありますが、ページの時間の高さに関する情報を動的に更新する必要があります.
Substitutionコントロールを使用して、動的コンテンツをキャッシュ・ページに挿入できます.Substitutionコントロールにはタグは表示されません.このコントロールをページまたは親ユーザーコントロールにバインドする方法が必要です.自分で静的メソッドを作成して、ページに挿入する情報を返します.Substitutionコントロールによって呼び出されるメソッドは、次の基準を満たす必要があります.
  • この方法は静的方法(Visual Basicでは共有方法)として定義される.
  • この方法は、HttpContextタイプのパラメータを受け入れる.
  • このメソッドはStringタイプの値を返します.

  • Substitutionコントロールでは、ページの他のコントロールにアクセスできません.つまり、他のコントロールの値をチェックしたり変更したりすることはできません.ただし、コードは、渡されたパラメータを使用して現在のページコンテキストにアクセスできます.
    ページが実行されると、Substitutionコントロールはメソッドを呼び出し、ページのSubstitutionコントロールをメソッドの戻り値に置き換えます.
    次のコード例では、Substitutionコントロールを使用してキャッシュ・ページに動的に更新されたコンテンツを作成する方法を示します.ページのLoadイベントのコードは現在の時間でLabelコントロールを更新します.ページのキャッシュ期間が60秒に設定されているため、Labelコントロールのテキストは60秒以内にページが複数回要求されても変更されません.ページのSubstitutionコントロールは、現在の時刻を文字列として返す静的メソッドGetTimeを呼び出す.ページをリフレッシュするたびに、Substitutionコントロールが示す値が更新されます.次の2つの方法でこの特性を実証しない:コード1:lineBorderBlue1{BORDER-TOP: #999999 1px groove;BORDER-BOTTOM: #999999 1px groove;BORDER-LEFT: #999999 1px groove;BORDER-RIGHT: #999999 1px groove;background-color:#efefef;}
    static string getCurrentTime(HttpContext context) { return DateTime.Now.ToString(); }void Page_Load(object sender, EventArgs e){ Response.Cache.SetExpires(DateTime.Now.AddSeconds(600)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true);}
    キャッシュページにダイナミックコンテンツを挿入する--substitutionコントロールを使用して

    Cache Time:<%=DateTimeをデモする.Now.ToString() %>

    Real Time:


    コード2:.lineBorderBlue1{BORDER-TOP: #999999 1px groove;BORDER-BOTTOM: #999999 1px groove;BORDER-LEFT: #999999 1px groove;BORDER-RIGHT: #999999 1px groove;background-color:#efefef;}
    <%@ OutputCache Duration="600"VaryByParam="none"%>static string getCurrentTime(HttpContext context) { return DateTime.Now.ToString(); }
    キャッシュページにダイナミックコンテンツを挿入する--substitutionコントロールを使用して

    Cache Time:<%=DateTimeをデモする.Now.ToString() %>

    Real Time:


    結果は図のようになります.