AJAX代表異步的JavaScript和XML。這是一個跨平臺的技術,可以加快響應速度。 AJAX服務器控件將腳本添加到由瀏覽器執(zhí)行和處理的頁面。
但是,像其他ASP.NET服務器控件一樣,這些AJAX服務器控件也可以擁有與它們關聯(lián)的方法和事件處理程序,這些處理程序在服務器端處理。
Visual Studio IDE中的控件工具箱包含一組稱為“AJAX擴展” 的控件,
ScriptManager控件是最重要的控件,并且必須存在于其他控件才能在頁面上工作。
它的基本語法,如下:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
如果從“添加項目” 對話框創(chuàng)建“啟用Ajax的站點” 或添加“AJAX Web窗體” ,則Web窗體將自動包含腳本管理器控件。 ScriptManager控件負責所有服務器端控件的客戶端腳本。
UpdatePanel控件是一個容器控件,并從Control類派生。 它充當其中的子控件的容器,沒有自己的接口。 當它內(nèi)部的一個控件觸發(fā)了一個提交(post)后,UpdatePanel會介入以異步啟動提交并更新頁面的那一部分。
例如,如果按鈕控件位于更新面板內(nèi)部并且被點擊,則只有更新面板中的控件將受到影響,頁面其他部分的控件將不受影響。這被稱為部分回傳或異步回傳。
在應用程序中添加一個AJAX Web表單。 它包含默認的腳本管理器(ScriptManager)控件,插入更新面板。 在更新面板控件內(nèi)放置一個按鈕控件和一個標簽控件。 在面板外面放置另一組按鈕和標簽。
首先打開Visual Studio,創(chuàng)建一個名稱為:AjaxControl 的空ASP.NET網(wǎng)站項目,如下所示 -

在這個項目名稱上點擊右鍵,在彈出的選項中選擇:添加 -> 添加新項,選擇Web窗體,創(chuàng)建一個文件:Default.aspx, 如下所示 -

設計視圖如下所示:

請注意,執(zhí)行該頁面時,如果點擊全部回傳按鈕,則會更新兩個標簽中的時間,但如果單擊局部回傳按鈕,則只會更新更新面板中的標簽。
運行上面項目,得到以下結(jié)果 -

點擊控件后,可以看到以下效果 -

一個頁面可以包含多個更新面板,每個面板包含其他控件(如網(wǎng)格)并顯示不同部分的數(shù)據(jù)。
當全部回傳 發(fā)生時,更新面板內(nèi)容默認內(nèi)容。可以通過更改控件的UpdateMode屬性來更改此默認模式??纯锤旅姘宓钠渌麑傩浴?/p>
UpdatePanel控件的屬性
下表顯示了UpdatePanel控件的屬性:
| 編號 | 屬性 | 描述 |
|---|---|---|
| 1 | ChildrenAsTriggers |
此屬性指示回發(fā)是否來自子控件,這會導致更新面板刷新。 |
| 2 | ContentTemplate |
它是內(nèi)容模板,并定義在更新面板中顯示的內(nèi)容。 |
| 3 | ContentTemplateContainer |
檢索動態(tài)創(chuàng)建的模板容器對象,并用于以編程方式添加子控件。 |
| 4 | IsInPartialRendering |
指示面板是否作為部分回貼的一部分進行更新。 |
| 5 | RenderMode |
顯示渲染模式??捎玫哪J绞?code>Block和Inline。 |
| 6 | UpdateMode |
通過確定一些條件來獲取或設置渲染模式。 |
| 7 | Triggers |
定義每個對應于導致面板自動刷新的事件的收集觸發(fā)器對象。 |
UpdatePanel控件的方法
下表顯示了UpdatePanel控件的方法:
| 編號 | 方法 | 描述 |
|---|---|---|
| 1 | CreateContentTemplateContainer |
創(chuàng)建一個Control對象,作為定義UpdatePanel控件內(nèi)容的子控件的容器。 |
| 2 | CreateControlCollection |
返回UpdatePanel控件中包含的所有控件的集合。 |
| 3 | Initialize |
如果啟用了部分頁面呈現(xiàn),則初始化UpdatePanel控件觸發(fā)器集合。 |
| 4 | Update |
導致更新UpdatePanel控件的內(nèi)容。 |
UpdatePanel控件的行為取決于UpdateMode屬性和ChildrenAsTriggers屬性的值。
| UpdateMode | ChildrenAsTriggers | 影響 |
|---|---|---|
Always |
False |
非法參數(shù) |
Always |
True |
如果整個頁面刷新或其上的子控件回發(fā),UpdatePanel會刷新。 |
Conditional |
False |
如果整個頁面刷新或者觸發(fā)外部控件啟動刷新,UpdatePanel將刷新。 |
Conditional |
True |
UpdatePanel刷新整個頁面刷新,或者其上的子控件回發(fā)或觸發(fā)控件在外部啟動刷新。 |
當一個或多個更新面板控件正在更新時,UpdateProgress控件在瀏覽器上提供了一種反饋。 例如,在執(zhí)行某些面向數(shù)據(jù)庫的作業(yè)時,用戶登錄或等待服務器響應。
它提供了一個可視的確認,如“正在載入頁面…”,表示正在進行工作。
UpdateProgress控件的語法是:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1" >
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
上面的代碼片段顯示了ProgressTemplate標簽中的簡單消息。但是,這可能是一個圖像或其他相關的控制。 UpdateProgress控件將顯示每個異步回發(fā),除非使用AssociatedUpdatePanelID屬性將其分配給單個更新面板。
UpdateProgress控件的屬性
下表顯示了UpdateProgress控件的屬性:
| 編號 | 屬性 | 描述 |
|---|---|---|
| 1 | AssociatedUpdatePanelID |
獲取并設置與此控件關聯(lián)的更新面板的ID。 |
| 2 | Attributes |
獲取或設置UpdateProgress控件的級聯(lián)樣式表(CSS)屬性。 |
| 3 | DisplayAfter |
獲取并設置顯示進度模板的時間(以毫秒為單位)。 默認值是500。 |
| 4 | DynamicLayout |
指示是否動態(tài)呈現(xiàn)進度模板。 |
| 5 | ProgressTemplate |
指示在異步回發(fā)期間顯示的模板,其比DisplayAfter時間花費更多的時間。 |
UpdateProgress控件的方法
下表顯示了UpdateProgress控件的方法:
| 編號 | 方法 | 描述 |
|---|---|---|
| 1 | GetScriptDescriptors |
返回UpdateProgress控件的客戶端功能所需的組件,行為和客戶端控件的列表。 |
| 2 | GetScriptReferences |
返回UpdateProgress控件的客戶端腳本庫依賴項列表。 |
定時器(Timer)控件用于自動啟動回發(fā)。 這可以通過兩種方式來完成:
(1)設置UpdatePanel控件的Triggers屬性:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnpanel2" EventName="Click" />
</Triggers>
(2)直接在UpdatePanel中放置一個Timer控件,作為一個子控件觸發(fā)器。 一個計時器可以成為多個UpdatePanel的觸發(fā)器。
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="1000">
</asp:Timer>
<asp:Label ID="Label1" runat="server" Height="101px" style="width:304px" >
</asp:Label>
</ContentTemplate>
</asp:UpdatePanel>