今天在做Datalist 中遍歷復選框選中狀態時,后台的代碼獲取checkbox的選中狀態始終是false,研究了好久才發現跟
Page_Load()事件有關。
經過測試Page_Load事件執行的情況分為兩種:
第一種:頁面第一次加載時執行。
第二種:前台頁面事件觸發后 ,后台的Page_Load會在一次執行。
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 dataList_win(page);//數據綁定函數 4 }
當頁面第一次加載時Page_Load事件內部執行DataList數據綁定的函數,在頁面點擊按鈕觸發事件時在后台的代碼會再一次執行Page_Load事件(數據綁定函數再一次執行),這樣的話就算前台的復選框全都選中,進入后台時就會重新進行數據綁定,這樣都就對前台的復選框選中狀態重置,所以要在Page_Load()事件中對數據綁定的函數加上判斷。
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 if (!Page.IsPostBack)//是否是頁面第一次加載 4 { 5 wj_win(page);//第一次加載執行 6 } 7 }
PS:后台進行數據綁定的函數在被調用的時候頁面才會顯示數據,所以在Page_Load事件內添加該函數,這樣就會在頁面加載時顯示數據.
無論何種情況都會執行Page_Load,這時就有必要判斷一下服務器處理Page_Load事件時是在何種情況發生;
而Page.IsPostBack正好解決了這個問題;
當是第一種情況的時候(為了響應客戶的請求)Page.IsPostBack返回false;
當是第二種情況的時候(把該頁面回發到服務器給服務器處理時)Page.IsPostBack返回True;
!Page.IsPostBack 就是為了 防止服務端的加載重復綁定數據!
