共用方式為


Substitution Web 伺服器控制項概觀

更新:2007 年 11 月

您可以利用 Substitution 控制項在可動態更新的頁面上建立區域,再整合至快取頁面。

這個主題包含:

  • 案例

  • 背景

  • 程式碼範例

  • 類別參考

案例

您可以使用 Substitution 控制項來指定要輸出快取 Web 網頁上的哪個區段顯示動態內容。Substitution 控制項為要快取之大部分內容所在的頁面提供了部分頁面快取的簡單方案。您可以輸出快取整個頁面,然後使用 Substitution 控制項指定免於快取的頁面部分。快取區域僅執行一次,直到快取項目過期或清除之前,都從快取讀取。動態區域則在每次要求頁面時執行。此快取模型可簡化主要內容為靜態的頁面程式碼,因為您不需要封裝這些區段以便在 Web 使用者控制項中快取。例如,當您有一個含有靜態內容 (例如新聞報導) 的頁面以及一個顯示廣告的 AdRotator 控制項時,這個快取模型就相當有用。新聞報導不會常常變更,這表示它們可以快取處理。不過,每次使用者要求頁面時,您會想要顯示新的廣告。AdRotator 控制項可直接支援快取後置替換 (Post-Cache Substitution),並會在每次頁面回傳時呈現新的廣告,不論是否快取頁面。

回到頁首

背景

快取 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 >
    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 ></head>
<body>
    <form id="form1" >
    <div>
    <p>
    <asp:Label  ID="Label1" />
    </p>
    <p>
    <asp:Substitution  
        ID="Substitution1" 
        MethodName="GetTime" />
    </p>
    <p>
    <asp:Button  ID="Button1" Text="Submit"/>
    </p>
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>

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

回到頁首

類別參考

下表列出 Substitution 控制項的相關類別。

成員

描述

Substitution

控制項的主要類別。

回到頁首

請參閱

概念

動態更新快取頁面的部分內容