最近主要幫一個(gè)團(tuán)隊(duì)測試和優(yōu)化項(xiàng)目,可能是由于項(xiàng)目的參與大部分都是新手,對ajax不是很熟,而造成ajax控件濫用,本文主要總結(jié)我們最近遇到的一些問題,和大家共同探討,希望不足支出,歡迎大家指出.也希望開發(fā)經(jīng)驗(yàn)豐富的前輩多多指導(dǎo).
以下是我根據(jù)遇到的問題總結(jié)出來的兩點(diǎn)心得:
1. updatepanle 不同情況的兩種使用方法 第一,直接用updatepanle的<Triggers></Triggers>屬性直接設(shè)置頁面的相關(guān)控件的事件,該方法使用于簡單使用updatepanle 或在同一個(gè)頁面的同一個(gè)tab頁。 第二,當(dāng)在同一個(gè)頁面存在多個(gè)tab頁,并且不同的tab頁的事件有所關(guān)聯(lián)的時(shí)候,一般用在后臺代碼注冊的方法比較適用。由于放在一個(gè)tab頁的updatepanle可能無法識別或找到另一個(gè)tab頁控件的觸發(fā)事件,很容易導(dǎo)致出錯(cuò),原因可能是你選的tab控件的類型所導(dǎo)致,我遇到過使用第三方的tab控件可以,但是使用微軟或其他的第三方的tab控件卻不行,雖然后者以后可能會解決這個(gè)問題,但為了你的程序能正常運(yùn)行,使用代碼注冊不失為一個(gè)明智的選擇。 比如你設(shè)計(jì)的一個(gè)頁面有多個(gè)tab頁,并且一個(gè)tab頁里的某個(gè)控件的某個(gè)事件要觸發(fā)另一個(gè)tab頁的異步更新事件,那么最好用代碼注冊updatepanle的更新事件。 具體實(shí)現(xiàn)代碼如下,也很簡單: 首先在Page_Load向ScriptManager1注冊異步更新的觸發(fā)控件 ScriptManager1.RegisterAsyncPostBackControl(btnAdd); 然后再btnAdd的某個(gè)觸發(fā)事件里調(diào)用要更新的方法, 最后該事件執(zhí)行后,調(diào)用更新區(qū)域的updatepanle執(zhí)行update()方法即可。 2. 盡量減少在同一個(gè)頁面(或tab頁)里使用多個(gè)updatepanle控件Upatepanle 可以減輕頁面和服務(wù)器的通信負(fù)擔(dān),但濫用反而會增加頁面和服務(wù)器的通信負(fù)擔(dān),同一個(gè)頁面適用過多的updatepanle將導(dǎo)致出現(xiàn)多次的往通信,比如一個(gè)事件源觸發(fā)多個(gè)更新事件。一般情況下,在同一頁面的同一個(gè)tab頁或table里只需要使用一個(gè)updatepanle就夠了,即使是不需要更新的控件也可以放在同一個(gè)updatepanle里,和需要更新的控件放在一起,只要不觸發(fā)它的事件即可或者讓其AutoPostBack為false即可。自然如果由于業(yè)務(wù)的需要,特殊情況也要特殊對待。所以如果不是特別的業(yè)務(wù)需要,盡量讓多個(gè)需要異步更新的控件放在同一個(gè)updatepanle里,統(tǒng)一異步更新,減少頁面往返的通信次數(shù)。而至于統(tǒng)一異步更新,業(yè)務(wù)外觀層(也就是頁面層)可以借助table來解決,業(yè)務(wù)代碼層(對應(yīng)的頁面后臺代碼)可以根據(jù)業(yè)務(wù)需求進(jìn)行優(yōu)化。
|