ASP.NET 動態載入的控制項一定要注意的事

分享到噗浪!

我只是想再特別提醒一下各位,如果你一定要動態載入控制項的話,一定要注意幾件事:

第一:熟悉 ASP.NET Page Lifecycle 很重要(事件執行的順序)

控制項的初始化(Initialize)的動作一定要放在 Page_Init 事件中!

控制項的初始化也包括設定控制項的預設值(Default Value)。

千萬不能將設定控制項初始值的程式碼寫在 Page_Load 事件裡,否則當 PostBack 回來的值會被 Page_Load 事件中的程式碼蓋掉。

動態將控制項加入到 ASP.NET 頁面中「最好」在 Page_Load 事件中執行,以確保在後續事件中可以取得頁面中所有的控制項。

第二:要特別留心控制項加入的順序

動態將控制項加入到 ASP.NET 頁面中時,要特別注意「控制項加入的順序」,順序很重要,只要加入的順序不對就很有可能會在 PostBack 的時候發生 ViewState 異常的狀況,各位可以參考我之前寫的一篇文章:釐清 ViewState 與動態加入的控制項可能發生的錯誤

第三:ViewSate 是個低調的怪獸,能不用就不用

你知道光是談 ViewState 就可以出一本書嗎!

老實說,ViewState 真的很好用,用的人也很多,誤用的人也很多,敗在 ViewState 上面的人也很多。所以一件事情所帶來的好處,背後通常也潛藏著某些不為人知的壞處。我剛學寫 ASP.NET 的時候,曾經寫過一個線上預約系統,因為頁面超複雜,一大堆控制項都是動態加入的,每次 PostBack 大概都要送出 1MB 左右的 ViewState 資料,當初剛學 ASP.NET 也不知道為什麼會這樣,只是覺得為什麼 ASP.NET 執行速度這麼慢,等要結案的時候才發現原來是 ViewState 搞的鬼,光是改另一種寫法就寫死我了。

所以我對 ViewState 一直沒什麼好感,後來我的態度是「我一定要徹底瞭解 ViewState,並且在未來的日子裡能不用就不用它」。既然不用又為何要瞭解的?因為如果你不深入瞭解一項技術背後設計的動機與嘗試解決的問題,你就無法從這項技術得到啟發,並發展出另一套更適合自己的開發架構。

短短的三點提醒,一定不足以應用所有的開發情境,所以各位若能貢獻一些動態載入控制項開發時的注意事項,十分歡迎在此留下些評論,互相交流交流。

  

此文章由 will 發表於 2008/6/24 下午 08:05:42

永久連結 | 評論 (8) | 此文章的RSSRSS comment feed |

分類: ASP.NET

標籤:

評論

八月 14. 2008 16:07

Ken

那,請問另一種寫法是什麼呢,可以教一下嗎,謝謝

Ken 台灣

八月 14. 2008 17:00

will

我的意思是「換一種寫法」,當然不限定換什麼寫法啦,看情況改寫摟!

will 台灣

八月 15. 2008 15:14

cloduio

很棒的文章
這些東西自己去試不知道要試到什麼時候才能發現
關鍵跟問題在哪裡
又學到了

cloduio 台灣

五月 8. 2009 15:23

peter

請問一下
動態新增上去的控制項

可以在其他方法中刪除嗎??

peter 台灣

五月 9. 2009 17:08

will

可以

will 台灣

十二月 14. 2009 16:44

coolalex

請問一下保哥,我利用Page_Init來加入動態控制項,在載入頁面時會執行一次,離開頁面竟然也會執行一次,結果載入網頁與離開網頁的流程都變成Page_Init -> Page_Load -> Page_Unload,我應該要如何修改才能讓載入網頁變成Page_Init -> Page_Load,離開網頁直接執行Page_Unload ??

coolalex 台灣

十二月 14. 2009 17:18

Will 保哥

coolalex: 離開頁面竟然也會執行一次
=> 這邏輯是錯的,你應先瞭解 HTTP 的運作流程,網頁內容下載回來後就已經在瀏覽器了,並沒有所謂「離開頁面」也會執行一次的狀況,除非你定義的「離開網頁」是先連到原本伺服器再連到另一台伺服器。

Will 保哥 台灣

十二月 14. 2009 17:26

coolalex

謝謝保哥,我剛剛去找了網頁生命週期的說明來看,我知道我傻在哪裡了,感謝您~~

coolalex 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading