2010-08-19 26 views
0

我有一個網格與一個TemplateField這是一個複選框,並說2綁定字段。Asp.net回發oninit

在回發頁Page_Load中,我使用會話中存儲的緩存數據集重新綁定網格。如果用戶選擇網格上的複選框,回發時我可以在網格上迭代並獲取這些檢查值,一切正常。

如果我將回發時的網格綁定代碼移動到OnInit而不是Page_Load,那麼我會鬆開這些用戶選中的複選框數據。爲什麼?在oninit之後,回發數據是否應該覆蓋在網格之上?

它確實與page_load一起工作,我假設當我重新綁定網格時,我將數據覆蓋在具有回發數據的網格上,因爲複選框列未被綁定,所以我不覆蓋回發數據。

注意:viewstate在我的網格上是禁用的,我綁定數據(存儲在會話中)在每個backback回發。還有一些奇怪的是,當我使用OnInit時,在每次回發時,我都會得到網格的第一頁,無論哪個頁面回發被觸發。 謝謝。

回答

1

我相信這是因爲ViewState尚未加載到OnInit事件中。請查看http://msdn.microsoft.com/en-us/library/ms178472.aspx瞭解更多關於asp.net頁面生命週期的信息。希望能幫助到你!!

+0

ViewState是我的網格禁用的鏈接,這就是我綁定存儲在會議上每個回發數據的原因。 – user425232 2010-08-19 14:01:29

+0

Upvote引用ASP.NET生命週期 - 非常有用的頁面。 – mikemanne 2010-08-19 17:36:18

0

與LoadViewState類似,ProcessPostData是在OnInit之後但在Page_Load之前發生的事情。我假設複選框的值作爲發佈數據發回服務器。因此,我懷疑問題與ViewState已啓用相同:OnInit爲時尚早 - 發佈的數據(複選框值)尚未應用於您的控件。

我沒有豐富的viewstate-disabled操作經驗,所以如果這個答案缺少一些細微差別,我很抱歉。

+0

我同意你的觀點,postdata不在OnInit中,這沒關係。我在OnPageIndexChanging上遍歷網格,在那裏我期望postdata,但沒有得到。只是因爲我將OnInit中的網格綁定了行爲。我想了解Page_Load Vs OnInit上綁定網格的區別。有一些我錯過了。 – user425232 2010-08-19 17:49:24

+0

在OnInit中重新綁定網格可能會導致ProcessPostData無法使用複選框值覆蓋正確的數據元素。但這是我的猜測 - 我不積極。對不起 - 我認爲我缺乏視圖狀態控制的經驗讓我很難變得非常有幫助。 : - / – mikemanne 2010-08-20 15:17:52