Asp.net Page 狀態儲存與恢複

來源:互聯網
上載者:User

應用情境:
在給客戶開發一個asp.net工作流程系統時,因為某些Form內容過長,客戶提出要求在對Form的編輯過程中隨時能夠儲存當前輸入,並且能隨時恢複儲存時的狀態。因為form的提交有嚴格的驗證代碼,因此儲存不能執行驗證,而不經過驗證的代碼不能儲存到系統資料庫中。如果用暫存資料表儲存又顯麻煩,代碼量會增加很多,同時可能導致系統產生新的bug.

解決方案產生過程:

首先想到的就是通過儲存Page的ViewState,然後在恢複的時候用儲存過的ViewState來替換。可以通過重寫Page的如下兩個方法來實現:
protected override void SavePageStateToPersistenceMedium(object viewState)
protected override object LoadPageStateFromPersistenceMedium()
這樣是可以恢複儲存時的Page的ViewState,但是IsPostBack狀態在第一次訪問頁面的時候仍然是false,這樣雖然可以恢複儲存過的viewstate,但是無法置IsPostBack為true,從而導致Page仍然按照非PostBack來執行從而無法達到恢複狀態的目的。本想就此放棄,但是同事給我推薦了codeproject.com上的一篇文章 http://www.codeproject.com/aspnet/PersistentStatePage.asp

看過之後知道了如何置PostBack狀態,那就是重寫DeterminePostBackMode()方法,這樣我們在儲存頁面的狀態的時候不僅儲存ViewState而且儲存DeterminePostBackMode()傳回值,在恢複頁面的時候不僅恢複ViewState,同時重寫DeterminePostBackMode()方法,返回我們儲存頁面狀態時儲存的DeterminePostBackMode()所返回的NameValueCollection,這樣恢複頁面的時候就可以置IsPostBack為ture了,這樣目標就基本實現了,可以很輕鬆的將一個Page在首次訪問的時候就將其置為儲存時的狀態,並可以從這一狀態繼續往下操作(接下來的PostBack都會正常運轉)

在我的範例程式碼中,可以看到我還儲存了Request.Form,這是因為考慮到一些非ASP.NET Server Control的值都會在Request.Form,這樣恢複了Request.Form就不會在頁面恢複後PostBack的時候丟失這一類值(這裡對Request.Form的恢複可以稱之為假恢複)。

這樣我的目標就實現了,但是codeproject.com上的這篇文章所附代碼比我的更複雜,完成的恢複也更多,甚至恢複了QueryString,但是不適合我的應用程式要求,於是我做了一個適合我的應用程式要求的例子:
http://files.cnblogs.com/bestcomy/PageStatePersistAndRestore.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.