l ASP.NET 2.0 AJAX Extensions 1.0:必備核心組件。
l ASP.NET AJAX Control Toolkit:控件工具箱,開源項目,包含一些已經(jīng)創(chuàng)建好的用戶控件及擴(kuò)展器,里面一些組件還是比較好用的。另外創(chuàng)建自己的擴(kuò)展控件也用到它。
l Sample Applications:應(yīng)用實例。
下載地址:http://ajax.asp.net/downloads/default.aspx?tabid=47。
Ajax的機(jī)制是異步回傳。一般的網(wǎng)頁點擊一個按鈕或觸發(fā)一個服務(wù)器事件后,回傳到服務(wù)器的時間里,頁面變?yōu)榘咨?,服?wù)器處理完成返回頁面后,才能進(jìn)行下一項操作,即同步機(jī)制。Ajax異步回傳后,頁面不變,還可以在頁面上進(jìn)行其它操作,服務(wù)器返回數(shù)據(jù)后,只有修改部分才會改變,即局部刷新,有效避免了頁面全部刷新。
(1) 新建站點,安裝Ajax后,新建站點時選擇“ASP.NET Ajax-Enabled Web Site”。(圖2.1)。
(2) 在Default.aspx的設(shè)計頁面,可以看到已經(jīng)增加了一個ScriptManager控件,這個是管理自動生成的腳本的,如果使用異步回傳,每個要有且僅有一個ScriptManager。
(3) 打開工具箱,會看到增加了一個Ajax Extensions選項卡(圖2.2)。如果安裝了Toolkit,還會增加一個Ajax Toolkit選項卡。
(4) 向頁面拖入一個UpdatePanel。它的作用是設(shè)定一個刷新區(qū)域,其生成的客戶端腳本會控制該區(qū)域有請求時只刷新UpdatePanel內(nèi)部的控件。一個頁面可以有多個UpdatePanel。
(5) 從標(biāo)準(zhǔn)控件中,拖一個Calendar日歷控件和一個Label到UpdatePanel中,將其ID分別改為CalendarInPanel和lblInPanel。
(6) 拖一個Calendar和一個Lable在UpdatePanel之外,將其ID分別改為CalendarOutPanel和lblOutPanel。
(7) 為兩個日歷控件分別增加SelectionChanged事件,其后臺代碼如下:
protected void CalendarInPanel_SelectionChanged(object sender, EventArgs e)
{
lblInPanel.Text = CalendarInPanel.SelectedDate.ToLongDateString();
}
protected void CalendarOutPanel_SelectionChanged(object sender, EventArgs e)
{
lblOutPanel.Text = CalendarOutPanel.SelectedDate.ToLongDateString();
}
(8) 以上工作完成后,打開aspx的代碼,可以看到body中代碼如下:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Calendar ID="CalendarInPanel" runat="server" OnSelectionChanged="CalendarInPanel_SelectionChanged">
</asp:Calendar>
<asp:Label ID="lblInPanel" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:Calendar ID="CalendarOutPanel" runat="server" OnSelectionChanged="CalendarOutPanel_SelectionChanged">
</asp:Calendar>
<asp:Label ID="lblOutPanel" runat="server" Text="Label"></asp:Label>
</form>
</body>
(9) 運行程序,可以看到,選擇UpdatePanel之內(nèi)的日歷時間時,只有內(nèi)部的Label顯示時間刷新了;而選擇UpdatePanel之外的日歷時間時,則整個頁面都刷新。
圖2.2所示的Ajax基本控件的作用如下:
l ScriptManager:腳本管理器,用于自動生成和管理客戶端腳本,每個頁面必須有且僅有一個。
l UpdatePanel:刷新面板,即將放置到其中的控件組合成一個整體,刷新時刷新這個局部區(qū)域,不影響其它??梢酝ㄟ^在頁面放入多個UpdatePanel將頁面分割成小的局部刷新區(qū)域。
l UpdateProgress:刷新進(jìn)度提示,由于Ajax是異步回傳,事件觸發(fā)后可以用該控件提示用戶正在加載,服務(wù)器返回數(shù)據(jù)后自動消失。
l Timer:時間觸發(fā)器,到達(dá)規(guī)定的毫秒數(shù)后觸發(fā)刷新事件。
l ScriptManagerProxy:腳本管理器代理,用于引入外部js文件。
(1) 在剛才做的例子中,拖一個UpdateProgress到UpdatePanel中。
(2) 在UpdateProgress中輸入“正在更新…”。
(3) 由于服務(wù)器處理速度太快,我們看不到UpdateProgress的效果,因此我們在服務(wù)器端延時處理,修改UpdatePanel中的日歷控件的事件代碼如下:
protected void CalendarInPanel_SelectionChanged(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000); // 延時秒
lblInPanel.Text = CalendarInPanel.SelectedDate.ToLongDateString();
}
(4) 運行,當(dāng)點擊UpdatePanel中的日歷時間時,會看到出現(xiàn)“正在更新…”的提示。