国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

ASP.NET - Substitution Web 服務器控件概述

2019-11-17 04:01:16
字體:
供稿:網(wǎng)友
您可以使用 Substitution 控件,在網(wǎng)頁上創(chuàng)建可動態(tài)更新并可隨后集成到緩存頁中的區(qū)域。



一、方案

使用 Substitution 控件可以在要緩存輸出的網(wǎng)頁上指定要顯示動態(tài)內(nèi)容的部分。對于多數(shù)內(nèi)容都要進行緩存的頁,Substitution 控件提供了進行部分頁緩存的簡化的解決方案。您可以緩存整個頁的輸出,然后使用 Substitution 控件來指定頁中不進行緩存的部分。緩存區(qū)域僅執(zhí)行一次,且將一直從緩存讀取,直至該緩存條目到期或被清除。動態(tài)區(qū)域則在每次請求頁時都會執(zhí)行。此緩存模型簡化了其內(nèi)容主要是靜態(tài)內(nèi)容的網(wǎng)頁的代碼,因為您不必在 Web 用戶控件中對這些靜態(tài)內(nèi)容進行封裝,以將它們放入緩存。例如,對于包含靜態(tài)內(nèi)容(如新聞故事)和顯示廣告的 AdRotator 控件的網(wǎng)頁,此緩存模型就非常有用。新聞故事不會經(jīng)常更改,這意味著可以將它們放入緩存。您可能會希望在用戶每次請求該網(wǎng)頁時顯示一條新廣告。AdRotator 控件直接支持緩存后替換,無論是否緩存了網(wǎng)頁,它都會在網(wǎng)頁每次回發(fā)時呈現(xiàn)一個新廣告。



二、背景

緩存 asp.net 網(wǎng)頁時,默認情況下,會緩存該網(wǎng)頁的全部輸出。在第一次請求時,該頁將運行并緩存其輸出。對于后續(xù)的請求,將通過緩存來完成,該頁上的代碼不會運行。

在某些情況下,您可能不但希望緩存 ASP.NET 網(wǎng)頁,還希望在每次請求該網(wǎng)頁時更新該網(wǎng)頁上的選定部分。例如,您可能要緩存某頁的很大一部分,但需要動態(tài)更新該頁上的與時間高度相關的信息。

可以使用 Substitution 控件將動態(tài)內(nèi)容插入到緩存頁中。Substitution 控件不會呈現(xiàn)任何標記。因此,您需要將該控件綁定到網(wǎng)頁或父級用戶控件中的方法。您需要創(chuàng)建可返回要插入到網(wǎng)頁中的信息的靜態(tài)方法。由 Substitution 控件調(diào)用的方法必須符合下面的標準:

      ·必須為靜態(tài)方法(在 Visual Basic 共享)。

·必須接受類型為 HttpContext 的參數(shù)。

·必須返回類型為 String 的值。

Substitution 控件無法訪問網(wǎng)頁上的其他控件,也就是說,您無法檢查或更改其他控件的值。但代碼卻可使用傳遞給它的參數(shù)來訪問當前網(wǎng)頁的上下文。

在頁運行時,Substitution 控件會調(diào)用該方法,然后用從該方法的返回值替換頁上的 Substitution 控件。



代碼示例

下面的示例演示如何使用 Substitution 控件在緩存頁上創(chuàng)建可動態(tài)更新的內(nèi)容。頁的 Load 事件中的代碼用當前時間來更新 Label 控件。因為頁的緩存持續(xù)時間已設置為 60 秒,所以 Label 控件的文本不會更改,即使在 60 秒的時間內(nèi)多次請求了該頁。頁上的 Substitution 控件調(diào)用靜態(tài)方法 GetTime,該方法將以字符串的形式返回當前時間。每次刷新網(wǎng)頁時,都會更新 Substitution 控件表示的值。

<%@ 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 控件指定輸出緩存網(wǎng)頁上要以動態(tài)內(nèi)容替換該控件的部分。Substitution 控件為要緩存大部分內(nèi)容的頁提供了一種緩存局部頁的簡化解決方案。可以對整頁進行輸出緩存,然后使用 Substitution 控件指定頁中免于緩存的部分。需要緩存的區(qū)域只執(zhí)行一次,然后從緩存讀取,直至該緩存項到期或被清除。動態(tài)區(qū)域則在每次請求頁時執(zhí)行。由于不必對這些部分進行封裝以緩存在 Web 用戶控件中,因此,此緩存模型簡化了主要是靜態(tài)內(nèi)容的頁的代碼。例如,如果頁包含靜態(tài)內(nèi)容(如新聞報道)和顯示廣告的 AdRotator 控件,這種情況下,此緩存模型就很有用。新聞報道不會更改,這意味著它們可以緩存。但是,您希望在用戶每次請求該頁時都顯示一條新廣告。AdRotator 控件直接支持緩存后替換,無論頁是否緩存,都在該頁回發(fā)時呈現(xiàn)一個新廣告。

      說明: 在緩存頁包含的用戶控件中可以放置 Substitution 控件。但是,在輸出緩存用戶控件中不能放置 Substitution 控件。

      Substitution 控件執(zhí)行時,會調(diào)用一個返回字符串的方法。該方法返回的字符串即為要在頁中的 Substitution 控件的位置上顯示的內(nèi)容。使用 MethodName 屬性指定要在 Substitution 控件執(zhí)行時調(diào)用的回調(diào)方法的名稱。指定的回調(diào)方法必須是包含 Substitution 控件的頁或用戶控件的靜態(tài)方法。回調(diào)方法的簽名必須與接受 HttpContext 參數(shù)并返回字符串的 HttPResponseSubstitutionCallback 委托的簽名匹配。

若要操作頁的輸出緩存,可使用 @ OutputCache 指令、HttpCachePolicy 類或 Cache 屬性。

Substitution 控件的另一種使用方法是,使用 HttpResponseSubstitutionCallback 委托實現(xiàn)緩存替換行為。此外,還可以在直接支持緩存替換功能的控件(如 AdRotator 控件)上實現(xiàn)緩存替換行為。



示例

下面的代碼示例演示如何以聲明方式將 Substitution 控件添加到輸出緩存網(wǎng)頁。加載頁面時,將在一個標簽中向用戶顯示當前的日期和時間。頁面中的此區(qū)域僅 60 秒便緩存和更新一次。當 Substitution 控件執(zhí)行時,將調(diào)用 GetCurrentDateTime 方法。GetCurrentDateTime 返回的字符串將顯示給用戶。每次刷新頁時,都不會緩存和更新頁中的這一部分。

<%@ outputcache duration="60" 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" language="C#">  



  void Page_Load(object sender, System.EventArgs e)

  {

    // Display the current date and time in the label.

    // Output caching applies to this section of the page.

    CachedDateLabel.Text = DateTime.Now.ToString();    

  }



  // The Substitution control calls this method to retrieve

  // the current date and time. This section of the page

  // is exempt from output caching.

  public static string GetCurrentDateTime (HttpContext context)

  {

    return DateTime.Now.ToString ();

  }



</script>



<html  >

<head runat="server">

  <title>Substitution Class Example</title>

</head>

<body>

  <form id="form1" runat="server">



    <h3>Substitution Class Example</h3>  



    <p>This section of the page is not cached:</p>



    <asp:substitution id="Substitution1"

      methodname="GetCurrentDateTime"

      runat="Server">

    </asp:substitution>



    <br />



    <p>This section of the page is cached:</p>



    <asp:label id="CachedDateLabel"

      runat="Server">

    </asp:label>



    <br /><br />



    <asp:button id="RefreshButton"

      text="Refresh Page"

      runat="Server">

    </asp:button>     



  </form>

</body>

</html>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永胜县| 涡阳县| 茂名市| 拉萨市| 舞阳县| 临高县| 平南县| 淄博市| 阿勒泰市| 青田县| 罗平县| 绥阳县| 嘉峪关市| 南靖县| 莒南县| 阜南县| 综艺| 忻州市| 汕头市| 虎林市| 旺苍县| 锡林郭勒盟| 淳安县| 仁寿县| 乌什县| 南宁市| 卢氏县| 崇文区| 和静县| 乐至县| 阜城县| 凌云县| 玉门市| 通化县| 绍兴县| 察哈| 通河县| 于都县| 山东省| 襄汾县| 闽侯县|