曾經寫過一篇關於Asp.net載入控制項時候會出現"未能載入檢視狀態"的文章。
http://www.cnblogs.com/king_astar/archive/2004/11/08/52322.html
但那時候經驗不足,分析問題的能力還比較弱。
現在遇到過的問題比較多,相應理解的可能也比較深入一些,特寫一個續來補充原文的不足。
我們先瞭解一下“視圖的狀態”,即ViewState,在我們查看Asp.net產生的網頁代碼中,我們可以看見有如下的代碼,就是ViewState的存在形式<input type="hidden" name="__VIEWSTATE" value="dDwyNDMzNDYzMjI7dDw7bDxpPDM+Oz47bDx0PDtsPG。。。
凡是能夠被序列化〔序列化,把對象產生為編碼的方式儲存〕的對象,則都可以儲存在viewstate中。一般的viewstate是沒有加密的是Base64編碼,也可以在web.config配置加密方式,具體的可查詢相關資料。
viewstate的在Asp.net作用是將控制項的狀態儲存,在下次Post給伺服器,伺服器進行恢複控制項的狀態。(控制項的狀態包括:值和事件。)
瞭解了viewstate是利用post來給伺服器的過程,在編寫Asp.net的時候就可以尋找一些“未能載入檢視狀態”錯誤來。
錯誤1:在伺服器控制項綁定狀態後,又改變控制項狀態mygrid.EditItemIndex = 5;
mygrid.DataSource = dt;
mygrid.DataBind();
mygrid.EditItemIndex = 3;//這裡會造成錯誤
錯誤2,修改伺服器控制項ID
在aspx或者ascx頁面中已經定義了伺服器控制項ID,卻在cs檔案中重新定義控制項新ID,
錯誤3,如果確實莫名奇妙出現錯誤,可嘗試手工加入一些控制項,再試試。
WebPart.Controls.Add(new Label());//it is
WebPart.Controls.Add(RightDefine1);