The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

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,並且在未來的日子裡能不用就不用它」。既然不用又為何要瞭解的?因為如果你不深入瞭解一項技術背後設計的動機與嘗試解決的問題,你就無法從這項技術得到啟發,並發展出另一套更適合自己的開發架構。

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