共用方式為


ASP.NET Web 網頁中的用戶端指令碼

更新:2007 年 11 月

ASP.NET Web 應用程式並不限於以伺服器為主的工具與語言。您可以將 ECMAScript (JavaScript 或 JScript) 加入至 ASP.NET 網頁中,建立豐富型瀏覽器功能。ASP.NET 提供一系列支援用戶端指令碼的功能。

其中一個選項就是建立用戶端指令碼的個別程式碼片段,並將其加入至 ASP.NET 網頁以支援您為應用程式設計的瀏覽器行為。如果您只想要加入少數幾個 JavaScript 程式碼片段,或是要使用已經擁有的 JavaScript 程式碼時,這個選項才會比較實用。這個選項同時會協助將您的 ASP.NET 網頁大小控制在最小。

此外,您可以利用 ASP.NET 中威力強大的 AJAX 功能。這些 AJAX 功能包含完整的架構,可支援下列功能:

  • JavaScript 中的物件導向程式設計

  • 非同步回傳。

  • 驗證與設定檔所需的應用程式 Web 服務。

  • 運用延伸的偵錯與追蹤支援來管理用戶端指令碼的伺服器控制項。

使用 ASP.NET AJAX 功能可讓您在使用 JavaScript 功能時,減少需要撰寫的程式碼。它能提供延伸的 JavaScript 功能,以及用以建立整合至 ASP.NET 之用戶端功能的架構。

本主題提供用以將用戶端指令碼加入至 ASP.NET 網頁的選項概觀。它包含以下各節:

  • 案例

  • 在 ASP.NET 網頁中加入自訂用戶端指令碼

  • 使用 ASP.NET AJAX 功能來延伸 JavaScript

  • 視用戶端指令碼而定的 ASP.NET 伺服器控制項

  • 將用戶端指令碼事件加入 ASP.NET 伺服器控制項

  • 在用戶端指令碼中參考伺服器控制項

  • 引發伺服器控制項的用戶端 Click 事件

  • 用戶端指令碼與伺服端程式碼之間的通訊

  • 建立用戶端指令碼元件

  • 將用戶端功能加入至伺服器控制項

案例

當您想要執行下列動作時,可以使用用戶端指令碼:

  • 改善使用者的 Web 網頁存取經驗,使其更豐富、更快回應使用者的動作,用起來更像傳統的用戶端應用程式。例如,您可以使用用戶端指令碼,在每次輸入字元時,檢查文字方塊中的鍵盤輸入。

  • 將 AJAX 功能加入至 ASP.NET 網頁可讓您執行下列動作:

    • 在網頁上動態管理 DOM 項目,以降低整頁的重新整理次數並避免產生重繪閃動。

    • 更新與管理使用者介面 (UI),而不需回傳至伺服器。

    • 將您的程式碼組織為用戶端元件。用戶端元件為可重複使用的物件,並以 Microsoft AJAX Library 為基礎來封裝 JavaScript。您也可以透過自訂伺服器端的控制項來管理用戶端元件,或是將其與現有伺服器控制項關聯,以加入用戶端功能。

在 ASP.NET 網頁中加入自訂用戶端指令碼

因為 ASP.NET 網頁終究只會呈現 HTML 標記,所以您可以將自己的用戶端指令碼加入 ASP.NET 網頁。ASP.NET Web 網頁中用戶端指令碼的支援範圍,僅限於要求網頁支援用戶端指令碼的瀏覽器。如果網頁是在行動電話或其他裝置的瀏覽器上執行,用戶端指令碼的支援程度會視瀏覽器而有所不同。

您可透過下列幾種選項,將用戶端指令碼加入至 ASP.NET 網頁:

  • 您可以靜態地將用戶端指令碼加入至包含程式碼或使用 include 屬性的 script 區塊中,以參考 JavaScript (.js) 檔案。請使用此選項,來插入指令碼區塊或 JavaScript 檔案 (內含您不需要動態建立或不需要由 Microsoft AJAX Library 額外提供 AJAX 功能的用戶端指令碼)。

  • 您可以使用 ClientScriptManager 類別,動態建立用戶端指令碼,並將其加入至 ASP.NET 網頁。當您想要建立視只在執行階段提供之資訊而定的指令碼時,請使用此選項。

  • 如果您計劃運用 ASP.NET 的 AJAX 功能時,可以使用 ScriptManager 伺服器控制項來管理用戶端指令碼檔案。ScriptManager 伺服器控制項可同時確保在您的指令碼執行之前,先在瀏覽器中載入 Microsoft AJAX Library。如需詳細資訊,請參閱 ASP.NET AJAX 概觀

加入靜態用戶端指令碼區塊

您可以將 script 區塊加入至 ASP.NET 網頁,方法就像您加入至其他 HTML 網頁一樣。您可以使用用戶端指令碼撰寫用戶端事件的事件處理常式,例如網頁的 onload 事件。當瀏覽器正在執行 ASP.NET 網頁時,頁面中的標記項目將可於用戶端指令碼中定址。它們會引發所有可能在 HTML 頁面中引發的用戶端事件。

注意事項:

您可以在用戶端指令碼中參考 ASP.NET 伺服器控制項。如需詳細資訊,請參閱本主題稍後介紹的在用戶端指令碼中參考伺服器控制項。

ASP.NET 網頁可同時藉由在 <script> 標記的 src 屬性中參考指令碼檔案來加以存取,如下列範例所示:

<script type="text/javascript" src="MyScript.js"></script>

將用戶端指令碼保留在外部 .js 檔案 (而不是在頁面本身) 可以協助您組織用戶端指令碼。它同時能讓指令碼的版本控制管理作業變得更簡單,並輕鬆地在各個網頁上加以共用。

瀏覽器也可以快取外部 .js 檔案,方法與快取 Web 網頁與圖片很類似。一旦瀏覽器將指令碼載入為外部檔案之後,任何需要這些檔案的 Web 網頁就可以在快取中加以取用。這樣一來,Web 應用程式的效能就會大幅提升。

動態建立用戶端指令碼

大多數狀況下,您可以使用宣告方式建立網頁的用戶端指令碼,通常當做指令碼區塊。然而,您可能需要動態建立用戶端指令碼。如果指令碼會視只在執行階段可用的資訊而定,則這會相當有用。例如,您可以將用戶端指令碼插入提供伺服器控制項的網頁 (在執行應用程式之前都無法得知其名稱 (ID)),或者您可以建立視從使用者取得之值而定的指令碼。

您可以呼叫 ClientScriptManager 類別的方法,動態建立用戶端指令碼並將其插入至呈現的頁面中,如下列所示:

下列範例說明如何將產生的用戶端指令碼動態加入至網頁。程式碼會檢查是否選取了名為 checkDisplayCount 的核取方塊。如果是的話,程式碼會執行下列工作:

  • 它會建立使用 span 項目的用戶端指令碼功能,以便在名為 TextBox1 的 TextBox 控制項中顯示字元計數。

  • 它會將用戶端事件加入至 TextBox 控制項。

  • 它會產生 span 項目。

程式碼會假定網頁包含了一個名為 checkDisplayCount (其 AutoPostBack 屬性設為 true) 的核取方塊,以及一個名為 PlaceHolder1 的 PlaceHolder 控制項。

Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs)
    If checkDisplayCount.Checked Then
        Dim scriptText As String = ""
        scriptText &= "function DisplayCharCount(){"
        scriptText &= "   getElementByID("spanCounter").innerText = " & _
            "document.forms[0].TextBox1.value.length"
        scriptText &= "}"
        ClientScriptManager.RegisterClientScriptBlock(Me.GetType(), _
            "CounterScript", scriptText, True)
        TextBox1.Attributes.Add("onkeyup", "DisplayCharCount()")
        Dim spanLiteral As New LiteralControl()
        spanLiteral.Text = "<span id=""spanCounter""></span>"
        PlaceHolder1.Controls.Add(spanLiteral)
    End If
End Sub

void Page_Load(object sender, EventArgs e)
{
    if(checkDisplayCount.Checked)
    {
        String scriptText = "";
        scriptText += "function DisplayCharCount(){";
        scriptText += "   spanCounter.innerText = " + 
            " document.forms[0].TextBox1.value.length";
        scriptText += "}";
        ClientScriptManager.RegisterClientScriptBlock(this.GetType(), 
           "CounterScript", scriptText, true);
        TextBox1.Attributes.Add("onkeyup", "DisplayCharCount()");
        LiteralControl spanLiteral = new 
            LiteralControl("<span id=\"spanCounter\"></span>");
        PlaceHolder1.Controls.Add(spanLiteral);
    }
}

如需詳細資訊,請參閱 HOW TO:以動態方式將用戶端指令碼加入至 ASP.NET Web 網頁

至於 ClientScriptManager 類別方法,您需要提供一個與指令碼區塊關聯的類型,並為指令碼區塊提供一個索引鍵。如果網頁和控制項 (自訂控制項或使用者控制項) 同時將指令碼區塊加入相同的網頁,提供類型可以幫助避免衝突。使用索引鍵可以協助避免重複。如果您呼叫其中一種方法加入指令碼,並且已經存在使用相同索引鍵和相同類型的指令碼,就不會再次加入指令碼。

您提供的類型與索引鍵能夠協助避免不必要的重複。因此,一般來說您不需要明確判斷指令碼區塊是否已經存在。然而,如果在應用程式中檢查現有的指令碼區塊是有用的,您可以呼叫下列方法:

使用 ScriptManager 控制項來加入用戶端指令碼

如果您正在使用 ASP.NET AJAX 功能,ScriptManager 控制項可以提供您一個將指令碼檔案加入至網頁的方法。這包含了磁碟上的靜態指令碼檔案 (.js 檔案),以及內嵌在組件中做為資源使用的指令碼檔案。您可以在控制項中以宣告方式指定指令碼檔案。或者,您可以使用 ScriptManager 控制項的註冊方法,以程式設計方式管理現有的用戶端指令碼檔案,並使用指令碼以提供網頁局部呈現的更新支援。

如需 ScriptManager 控制項的概觀,請參閱 ScriptManager 控制項概觀。如需如何在組件中內嵌做為資源使用的 JavaScript 檔案,以及如何在 Web 網頁中使用它的詳細資訊,請參閱逐步解說:嵌入 JavaScript 檔做為組件中的資源

注意事項:

如果您正在使用 ASP.NET 的用戶端 AJAX 功能,而非以伺服器為主的功能,請使用 ClientScriptManager 類別的方法,將指令碼插入至 ASP.NET 網頁。例如,如果您不是使用指令碼的 UpdatePanel 控制項或當地語系化功能,就不需要使用 ScriptManager 控制項。因此,您無法呼叫其方法,以將用戶端指令碼插入至網頁中。使用 ClientScriptManager 類別的方法,通常會比使用 ScriptManager 控制項方法要來得有效率。這是因為 ClientScriptManager 類別方法不需要針對以伺服器為主的功能 (ScriptManager 控制項支援這些功能) 進行額外的處理。如果您必須動態建立指令碼 (而不是單純地管理現有指令碼),請使用 ClientScriptManager 類別,將用戶端指令碼插入至網頁中。例如,如果您想要以預先存在之指令碼檔案無法參考的資訊為基礎,動態建立用戶端指令碼的話,請使用 ClientScriptManager 類別。

使用 ASP.NET AJAX 功能來延伸 JavaScript

ASP.NET 支援 AJAX 功能,讓您使用用戶端指令碼將豐富的功能加入至 ASP.NET 網頁。這包含了非同步回傳、反應速度很快的 UI,以及其他功能。AJAX 功能可透過包含用戶端指令碼程式庫的 Microsoft AJAX Library,將跨瀏覽器的 ECMAScript (JavaScript) 與動態 HTML (DHTML) 技術整合在一起來加以實作。AJAX 功能會與以 ASP.NET 伺服器為基礎的開發平台整合在一起。

您可以使用 Microsoft AJAX Library 類型系統、物件導向功能,以及 JavaScript 物件的延伸功能來提供下列功能以建立自訂的用戶端指令碼:

  • 命名空間

  • 繼承

  • 介面

  • 列舉型別

  • 反映

  • Helper 偵錯

  • 追蹤

  • 具型別例外處理

  • 適用字串與陣列的 Helper 方法。

    注意事項:

    就算您不打算使用 ASP.NET 中以伺服器為主的 AJAX 功能,還是可以使用 Microsoft AJAX Library。

如需 Microsoft AJAX Library 如何延伸 JavaScript 功能的詳細資訊,請參閱下列主題:

AJAX 著重在瀏覽器相容性

Microsoft AJAX Library 中的瀏覽器相容性層為最常用的瀏覽器 (包括 Microsoft Internet Explorer、Mozilla Firefox 和 Apple Safari) 提供 AJAX 指令碼相容性。不論您以哪一種支援的瀏覽器為目標,所撰寫的指令碼皆相同。如需詳細資訊,請參閱 ASP.NET AJAX 概觀

視用戶端指令碼而定的 ASP.NET 伺服器控制項

某些 ASP.NET 伺服器控制項會視用戶端指令碼來決定其功能。例如,LinkButton 控制項需要用戶端指令碼支援其回傳 (Postback) 行為。當呈現網頁時,會將 ASP.NET Web 伺服器控制項所需的用戶端指令碼自動加入網頁。為這些控制項產生的用戶端指令碼,獨立於自行建立的任何用戶端指令碼。

如需詳細資訊,請參閱使用用戶端指令碼的 ASP.NET Web 伺服器控制項

將用戶端指令碼事件加入 ASP.NET 伺服器控制項

ASP.NET 控制項會在網頁中呈現為項目 (控制項呈現的實際項目是依照網頁的標記語言而定,不論是 HTML、XHTML 或其他語言)。因此您可以將用戶端指令碼事件處理加入控制項,如同使用網頁上任何項目一樣。然而,在某些情況中,您必須留意控制項呈現輸出的方式,以及控制項為自己保留那些屬性。

如需詳細資訊,請參閱 HOW TO:將用戶端指令碼事件加入至 ASP.NET Web 伺服器控制項

以宣告方式加入用戶端事件處理常式

在 ASP.NET 伺服器控制項的標記中,可以使用屬性 (Attribute) 設定屬性 (Property) 值。例如,若要設定 TextBox 控制項的 Text 屬性,您使用建立如下的標記:

<asp:textbox id="TextBox1"  text="Sample Text" />
安全性注意事項:

TextBox 可接受使用者輸入,但這是可能的安全性威脅。根據預設,ASP.NET 網頁會驗證該使用者的輸入內容中沒有包含指令碼或 HTML 項目。如需詳細資訊,請參閱指令碼攻擊概觀

如果您加入了無法對應至控制項屬性 (Property) 的屬性 (Attribute),則 ASP.NET 會在伺服器處理過程中忽略該屬性 (Attribute)。它會以原樣做為控制項產生的標記的一部分,並傳送至瀏覽器。例如,TextBox 控制項沒有名為 onkeyup 的屬性 (Property)。因此,如果您將 onkeyup 屬性包含在 TextBox 控制項的標記中,屬性將會傳送到瀏覽器。這個行為可以讓您在標記中宣告事件繫結,以便將其加入至伺服器控制項中。例如,TextBox 控制項的下列標記,只要使用者在文字方塊中按下按鍵,就會導致文字方塊在名為 spanCounter 的 span 項目中顯示目前的文字長度。

<asp:textbox id="TextBox1"  text="Sample Text" 
  onkeyup="spanCounter.innerText=this.value.length;" />

此外,事件可以呼叫在網頁其他處的用戶端指令碼中定義的方法:

<asp:textbox id="TextBox1"  text="Sample Text" 
  onkeyup="DisplayCount(this);" />

請注意,伺服端程式碼 (Visual Basic 或 C#) 所使用的語言不會影響用戶端指令碼,而且永遠使用 ECMAScript (JavaScript 或 JScript) 來撰寫。

如需詳細資訊,請參閱 HOW TO:將用戶端指令碼事件加入至 ASP.NET Web 伺服器控制項

在伺服端程式碼中加入屬性

除了以宣告方式為控制項加入屬性以外,也可以使用伺服端程式碼以程式設計方式加入屬性。如果要加入的屬性值只能在執行階段得知,這個選項會很有用。如需詳細資訊,請參閱 HOW TO:設定 ASP.NET Web 網頁中控制項的 HTML 屬性

在用戶端指令碼中參考伺服器控制項

當呈現 ASP.NET 伺服器控制項時,控制項的 ClientID 屬性 (Property) 會跟結果項目的 id 和 name 屬性 (Attribute) 一起呈現至網頁 (ClientID 屬性 (Property) 會從您設定的 ID 屬性自動產生)。例如,您可以建立下列 ASP.NET 伺服器控制項:

<asp:textbox id="TextBox1"  text="Sample Text" />

ClientID 屬性設定為 TextBox1 後,在 HTML 架構瀏覽器中產生的項目看起來如下:

<input name="TextBox1" type="text" value="Sample Text" id="TextBox1" />
注意事項:

form 項目只呈現 ID 屬性,而不會呈現 name 屬性。

因此,您可以使用這些屬性在用戶端指令碼中參考伺服器控制項。通常您會在用戶端指令碼中使用完整的參考來為控制項定址。如果控制項是網頁中 form 項目的子項目,通常可以使用如下列範例所示的語法來參考用戶端指令碼中的控制項:

var tb1 = document.getElementById("TextBox1");
tb1.value = "New value";

下列範例假設網頁中的 form 項目已經將 id 屬性設定為 form1。

document.form1.TextBox1.value = "New value";

參考伺服器控制項所需的實際語法,是依照您使用的控制項,以及其是否為其他控制項的子控制項而定。如果您不確定如何參考控制項,執行網頁、檢視其來源並且判斷控制項的呈現方式,將有助於您確定。

參考在其他控制項中呈現的控制項

某些控制項能夠讓子控制項呈現在網頁中,其中包含資料清單控制項,例如 ListViewGridViewDetailsViewFormViewDataList,和 Repeater 控制項,以及使用者控制項和 Web 組件控制項。

在此情況下,子控制項可能不會包含唯一的 ID。這可能是因為子控制項係在範本 (負責針對每個資料列 (資料清單控制項) 產生新的控制項執行個體) 中定義的緣故。或者可能是因為父控制項可以從外部來源 (使用者控制項與 Web 組件控制項) 加入至網頁的緣故。因此這些父控制項是「命名容器」(Naming Container) (換句話說,它們實作 INamingContainer)。命名容器會保證網頁上的子控制項都有唯一的 ID。

例如,您可以在 DataList 控制項中建立 ItemTemplate 屬性。在範本中,您可以加入 CheckBox 控制項,並將其 ID 設為 checkEnabled。當呈現 DataList 控制項時,就會為每個資料項目呈現新的 checkEnabled 控制項。呈現的頁面不得包含名為 checkEnabled 之項目的多個執行個體。因此,DataList 控制項會為每個所屬的子控制項建立唯一的識別。

命名容器子控制項的唯一識別是藉由呈現兩個屬性所產生。針對每個子控制項:

  • 控制項的 UniqueID 屬性 (Property) 呈現為 name 屬性 (Attribute)。

  • 控制項的 ClientID 屬性 (Property) 呈現為 id 屬性 (Attribute)。

ClientID 和 UniqueID 屬性都是根據原始 ID 屬性,並使用足夠的資訊修改過以保證結果在網頁中是唯一的。用戶端指令碼中可以參考 ClientID (就是呈現項目中的 id 屬性) 的值。

如果您在瀏覽器中顯示包含命名容器的網頁,可以檢視網頁的原始碼,查看產生來當做命名容器子控制項的 name 和 id 屬性使用的唯一 ID。然而,建議您不要直接參考那些在瀏覽器中看到的 ID。用來產生子控制項唯一 ID 的公式可能會改變。而是應該在伺服端程式碼中取得子控制項的 ClientID 屬性值,並且使用該值來參考子控制項。例如,您可能會在網頁中以動態方式建立用戶端指令碼。如果用戶端指令碼需要參考到子控制項,請取得子控制項的 ClientID 屬性,然後將其建置在動態指令碼中。

引發伺服器控制項的用戶端 Click 事件

如同稍早所討論的,您可以藉由將 onclick 屬性加入至控制項的標記,將用戶端 Click 事件加入至大部分的 ASP.NET 伺服器控制項。然而,某些控制項會保留 onclick 屬性以定義繫結至伺服器事件。其中包括 ButtonLinkButtonImageButton 控制項。在這些控制項中,您不能以宣告方式使用 onclick 屬性,將用戶端指令碼處理常式加入控制項。

您可以使用兩種方法加入 Click 事件的用戶端指令碼處理常式:

  • 將控制項的 OnClientClick 屬性設定為要執行的指令碼。當呈現按鈕控制項時,OnClientClick 值會變成 onclick 屬性。

  • 藉由呼叫控制項之 Attributes 集合的 Add 方法,以程式設計方式加入 onclick 屬性。

    注意事項:

    如果控制項已經將 onclick 做為基本功能的一部分 (例如 LinkButton) 來使用的話,您將無法以程式設計方式將 onclick 加入至伺服器控制項。

下列程式碼範例會示範同時引發用戶端和伺服器 Click 事件的 Button 控制項:

<asp:button id="Button1" 
   
  OnClientClick="return confirm('Ok to post?')" 
  onclick="Button1_Click" 
  Text="Click!" />

用戶端指令碼與伺服端程式碼之間的通訊

除了使用標準的回傳之外,ASP.NET 網頁還可以透過一些方式,在用戶端指令碼與伺服端程式碼之間通訊。ASP.NET 中的 AJAX 功能 (例如 UpdatePanel 伺服器控制項) 會為您自動化非同步的網頁局部呈現更新。此外,ASP.NET AJAX 支援非同步呼叫 Web 服務。

如果您並未使用 ASP.NET 的 AJAX 功能,可以直接叫用自訂的用戶端回呼並透過各種方法在瀏覽器與伺服器之間共用資訊。下一節提供可用選項的資訊。

從用戶端指令碼直接呼叫伺服端程式碼

用戶端指令碼可以實作用戶端回呼,以直接呼叫伺服端程式碼。在 ASP.NET Web 網頁的一般順序中,每個執行伺服端程式碼的使用者動作都需要回傳。但是,您也可以在不完整回傳的前提下,從瀏覽器叫用伺服器處理。在此情況下,瀏覽器不會將整個頁面傳送至伺服器,並在伺服器回應時重新加以載入。反之,瀏覽器會將小量的資料傳送至伺服器。當伺服器傳送回應時,瀏覽器中的用戶端指令碼會直接處理傳回的資料,而不會重新載入頁面。在伺服器處理期間,諸如區域變數的所有用戶端狀態都會保留下來。此程序稱為非同步回傳,是網頁局部呈現的重要技術。

您可以透過下列方式,不使用回傳技術而是直接從用戶端指令碼呼叫伺服器方法:

  • 使用 ASP.NET UpdatePanel 伺服器控制項。此控制項是 ASP.NET 之 AJAX 功能的一部分。它能讓您定義網頁的某個區域,使其透過網頁局部呈現更新程序來重新整理。在您使用 UpdatePanel 控制項時,不需要親自撰寫任何的用戶端指令碼來叫用非同步的網頁局部呈現更新。如需詳細資訊,請參閱網頁局部呈現概觀UpdatePanel 控制項概觀

  • 請使用 Web 服務通訊的 ASP.NET AJAX 支援,撰寫可叫用 Web 伺服器方法的用戶端指令碼。在概念上,這個方式與撰寫自己的用戶端指令碼回呼來呼叫 Web 伺服器方法很類似。但是,Microsoft AJAX Library 會負責處理叫用伺服器方法的事宜,並提供更穩定的用戶端指令碼程式庫以便進行並處理呼叫。如需詳細資訊,請參閱 ASP.NET AJAX 中的 Web 服務

  • 實作用戶端回呼。在此情況中,您需要撰寫可傳送要求並處理結果的用戶端程式碼。最常見的方法就是在用戶端指令碼中建立呼叫函式,與一個在伺服器傳回結果時能夠加以叫用的回呼函式。如需詳細資訊,請參閱在 ASP.NET 網頁中以程式設計方式實作用戶端回呼但不回傳

每種方法各有其優點。建立自己的用戶端回呼能夠提供您最少的處理負擔與最小的網頁大小。使用 UpdatePanel 伺服器控制項可讓您實作網頁局部呈現更新,而無須親自撰寫任何用戶端指令碼。使用 AJAX 來呼叫 Web 服務同時可讓您省去為了進行非同步 Web 服務呼叫而撰寫大部分用戶端指令碼的麻煩。

使用 HiddenField 控制項來共用資料

您可以將 HiddenField 控制項加入至網頁,在用戶端指令碼與伺服端程式碼之間共用資訊。您可以根據用戶端指令碼的 ID 來參考隱藏欄位。您也可以參考伺服端程式碼中的隱藏欄位。這樣一來,您就可以將值儲存在程式碼區塊中,並於其他區塊中加以讀取。若要從伺服端程式碼將資訊傳遞至用戶端指令碼,您可以使用 RegisterHiddenField 方法以程式設計方式建立隱藏欄位。此方法可讓您指定欄位的 ID 與值。您可以使用此欄位,以用戶端指令碼能夠讀取的方式將動態值儲存在網頁中。

您也可以使用 Cookie 在伺服端程式碼和用戶端程式碼之間共用值。如需如何在伺服端程式碼中撰寫與讀取 Cookie 的詳細資訊,請參閱 HOW TO:撰寫 CookieHOW TO:讀取 Cookie。如需如何使用 JavaScript 來讀取與撰寫 Cookie 的詳細資訊,請參閱 MSDN 網站上的 JavaScript 和 Cookie (英文) 一文說明。

在非同步回傳期間共用資料

如果您正在使用 ASP.NET 的 AJAX 功能,可以在非同步回傳期間 (網頁局部呈現) 使用 RegisterDataItem 方法,將自訂資料當成字串從伺服器傳送至用戶端。RegisterDataItem 方法可讓您使用伺服端程式碼來註冊附加至控制項的欄位。您可以透過 ASP.NET AJAX Sys.WebForms.PageLoadingEventArgsSys.WebForms.PageLoadedEventArgs,和 Sys.WebForms.PageLoadedEventArgs 物件,在瀏覽器中存取用戶端指令碼中的欄位值。您只能在非同步回傳期間呼叫 RegisterDataItem 方法。

如需如何使用 RegisterDataItem 方法以便在伺服器與用戶端之間共用資料的詳細資訊,請參閱下列主題:

建立用戶端指令碼元件

用戶端元件為可重複使用的物件,並以 Microsoft AJAX Library 為基礎來封裝 JavaScript。程式庫提供下列基底用戶端物件型別類別:元件 (隱藏式元件的基底類別)、控制項以及行為。您可以從這些類別中衍生,以提供包含下列各項的豐富型用戶端 (Rich Client) 功能:

  • 取得元件從初始化到處置之整個生命週期的存取權。其中包含當屬性值變更時,所引發的事件。

  • 將 DOM 項目以擁有新功能的用戶端物件來表示。這樣會延伸 DOM 項目的行為。例如,您可以加入浮水印行為,以便附加至現有文字方塊。

如需詳細資訊,請參閱下列主題:

將用戶端功能加入至伺服器控制項

任何現有或自訂的 ASP.NET 伺服器控制項都可以轉換為 ASP.NET AJAX「擴充項控制項」(Extender Control)。擴充項控制項是一種 Web 伺服器控制項,可以透過 Web 瀏覽器的 ECMAScript (JavaScript)、DHTML,和 AJAX 功能來加入與伺服器互動及進行非同步通訊之類的功能。

如需詳細資訊,請參閱下列主題:

請參閱

概念

ASP.NET Web 伺服器控制項和瀏覽器能力

ASP.NET Web 伺服器控制項事件模型