當頁面有部分內容需刷新,很適合使用UpdataPanel操作,當發生doPostBack時,只會更新UpdatePanel內容。
下面兩張圖可以看出在沒有updatepanel的情況下, 頁面刷新後, 兩個控制項都取得指定的值。
執行前
執行後
1.建立控制項UpdataPanel與ScriptManaget
2.在updatepanel內新增Triggers, 新增要執行postback的按鈕.
執行後,只有updatepanel的內容被更新。
當我們有兩個顯示區塊,一個顯示統計圖表,另一個顯示明細表,因明細資料較多,當執行頁面切換會觸發postback,此時統計圖表的區塊也會跟著更新。
若要避免這樣的狀況,可以將第一個區塊的UpdateMode設為Conditional,這樣就不會因為第二個區塊發生postback而刷新。
後來又有一個問題,在初次載入時,第一個區塊透過ajax呼叫後台取得資料,由於執行順序的關係,後台未處理完原本的程序就發生執行WebMethod的程序,導致回傳的資料為空值。
因此需在前台增加判斷式,確認postback執行完成才透過ajax呼叫後台,如同onload事件。
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
var elemId;
function BeginRequestHandler(sender, args){
elemId = args.get_postBackElement();
}
function EndRequestHandler(sender, args){
if(elemId =='btnQuery'){
//program
}
</script>