AJAX 代表 Asynchronous JavaScript and XML。這是一項跨平臺的能加速響應時間的技術。AJAX 服務器控件將腳本添加到頁面,它由瀏覽器執(zhí)行并處理。
然而像其他 ASP.NET 服務器控件一樣,這些 AJAX 服務器控件也能擁有與它們相聯系的方法和事件句柄,它們都在服務器端處理。
在 Visual Studio IDE 里的 control 工具箱含有一組叫作 'AJAX' 的控制組件。
http://wiki.jikexueyuan.com/project/asp-net/images/ajax_extensions.jpg" alt="1" />
ScriptManager 控件是最重要的控件并且必須出現在頁面上以讓其他控件工作。
它有基本語法:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
如果你創(chuàng)建一個 'Ajax Enabled site' 或者從 'Add Item' 對話框添加一個 'AJAX Web Form',網頁將自動形成,并包含 script manager 控件。ScriptManager 控件為所有的服務器端的控件照顧客戶機端的腳本。
UpdatePanel 控件是一個容器控件并且源自 Control 類。它作為它里面的子控件的容器而運作并且不擁有它自己的接口。當它其中的一個控件觸發(fā)提交回來,UpdatePanel 干預異步啟動并更新部分頁面。
例如,如果一個 button 控件在 update panel 內,并且它被點擊了,只有 update panel 內的控件將被影響,頁面其他部分的控件將不會被影響。這被叫做部分提交返回或者異步提交返回。
在你的應用程序中添加一個 AJAX 網頁表單。它包含默認的 script manager 控件。插入一個 update panel。將一個 button 控件和一個 label 標簽放置在 update panel 控件內。將另一個 button 和 label 集放置在 panel 外。
設計視圖如下所示:
http://wiki.jikexueyuan.com/project/asp-net/images/scriptmanager.jpg" alt="2" />
資源文件如下所示:
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="btnpartial" runat="server" onclick="btnpartial_Click" Text="Partial PostBack"/>
<br />
<br />
<asp:Label ID="lblpartial" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<p> </p>
<p>Outside the Update Panel</p>
<p>
<asp:Button ID="btntotal" runat="server" onclick="btntotal_Click" Text="Total PostBack" />
</p>
<asp:Label ID="lbltotal" runat="server"></asp:Label>
</form>
button 控件對時間處理程序都擁有相同的代碼:
string time = DateTime.Now.ToLongTimeString();
lblpartial.Text = "Showing time from panel" + time;
lbltotal.Text = "Showing time from outside" + time;
觀察當頁面被執(zhí)行時,如果總的提交返回按鈕被點擊了,它將更新標簽中都更新時間,但是如果部分提交返回按鈕被點擊,它僅僅更新在 update panel 內的標簽。
http://wiki.jikexueyuan.com/project/asp-net/images/update_panel.jpg" alt="3" />
| 屬性 | 描述 |
|---|---|
| ChildrenAsTriggers | 這個屬性表示返回是否來自于子控件,這將引起 update panel 的刷新。 |
| ContentTemplate | 它是內容模板并且定義了當它出現時什么出現在 update panel 內。 |
| ContentTemplateContainer | 檢索動態(tài)創(chuàng)建的 template container 對象并被用來以編程方式添加子控件。 |
| IsInPartialRendering | 指出 panel 是否被更新作為部分提交返回的一部分。 |
| RenderMode | 展示 render 模式??捎玫哪J绞?Block 和 Inline。 |
| UpdateMode | 通過確定一些條件來獲得或設置 rendering 模式。 |
| Triggers | 定義 collection trigger 對象,每一個對應于一個引發(fā) panel 自動更新的事件。 |
以下表格展示了 update panel 控件的方法:
| 方法 | 描述 |
|---|---|
| CreateContentTemplateContainer | 創(chuàng)建了一個 Control 對象來作為定義 UpdatePanel 控件內容的子控件的容器。 |
| CreateControlCollection | 返回所有包含在 UpdatePanel 控件內的控件集合 |
| Initialize | 如果部分頁面繪制被運行的話,初始化 UpdatePanel 控件觸發(fā)器集合。 |
| Update | 引起 UpdatePanel 控件內容的更新。 |
update panel 的行為依賴于 UpdateMode 屬性和 ChildrenAsTriggers 屬性的值。
| 方法 | 描述 | 影響 |
|---|---|---|
| Always | False | 不合法的參數。 |
| Always | True | 如果整個頁面更新或者一個它上面的一個子控件返回,UpdatePanel 更新。 |
| Conditional | False | 如果整個頁面更新或者它外部的一個觸發(fā)的控件開始一次更新,UpdatePanel 更新。 |
| Conditional | True | 如果整個頁面更新或者一個它上面的一個子控件返回或者一個它外部的觸發(fā)控件開始一次更新,UpdatePanel 更新。 |
當一個或者更多的 update panel 控件被更新時,UpdateProgress 控件提供了瀏覽器的一種反饋。例如,當一個用戶登錄或者當執(zhí)行一些面向數據庫的工作時等待服務器響應。
它提供了如 "Loading page..." 的視覺確認,表示工作在處理中。
UpdateProgress 控件的語法是:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1" >
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
以上的片段展示了一個簡單的帶有 ProgressTemplate 標簽的信息。但是,它可以是一張圖片或者其他相關的控件。UpdateProgress 控件顯示每一個異步的返回,除非它使用 AssociatedUpdatePanelID 屬性,被指定為單獨的 update panel。
以下的表格展示了 update progress 控件的屬性。
| 屬性 | 描述 |
|---|---|
| AssociatedUpdatePanelID | 獲得并用這個控件所聯系的控件設置 update panel 的 ID。 |
| Attributes | 獲得并設置 UpdateProgress 控件的 cascading style sheet(CSS)屬性。 |
| DisplayAfter | 在處理模板被展示后獲得并以毫秒設置時間。默認是 500。 |
| DynamicLayout | 指示進程模板是否被動態(tài)展示。 |
| ProgressTemplate | 指示模板在一個比 DisplayAfter 時間花了更多時間的異步提交返回的過程中展示。 |
以下的表格展示了 update progress 控件的方法:
| 方法 | 描述 |
|---|---|
| GetScriptDescriptors | 返回一個 UpdateProgress 控件的客戶端功能所需要的組件,行為和客戶端控件的列表。 |
| GetScriptReferences | 返回一個客戶端腳本依賴 UpdateProgress 控件的列表。 |
timer 控件被用來自動初始化提交返回。這可以用兩種方式完成:
(1)設置 UpdatePanel 控件的 Triggers 屬性。
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnpanel2" EventName="Click" />
</Triggers>
(2)直接在 UpdatePanel 內部放置一個 timer 控件來作為一個子控件的觸發(fā)器。一個單獨的 timer 能作為許多 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>