2012-01-24 53 views
1

目前我通過重新查詢數據庫來填充網格來恢復狀態,但頁面加載速度太慢。相反,我想將視圖狀態保存在會話變量中,並在用戶重新訪問該頁面時將其恢復。這是如何完成的?我應該使用SessionPageStatePersister嗎?這不是一個回傳情況,甚至不是一個跨頁面回發。會話頁面viewstate如何在非回發,非跨頁面回發場景中保存和恢復?

背景:我已將VS 2010 ASP.Net Web應用程序模板與主頁和多個選項卡式內容頁一起使用。導航到新選項卡時,狀態會丟失。我的客戶選項卡允許用戶從AspxGridView中篩選和選擇一個客戶。所選客戶ID存儲在會話變量中,用於在其他選項卡上顯示相關客戶數據:聯繫人,發票,任務等。我可以使用SaveClientLayout保存和恢復客戶網格過濾器,排序和佈局。但我不知道如何在不重新查詢數據庫的情況下恢復網格數據。

我發現this tutorial並且在標題爲SessionPageStatePersister的章節中實現了代碼。我已經複製了代碼並創建了SessionPageStateAdapter和.browser文件。我很困惑如何訪問這個會話視圖狀態數據。我需要幫助如何保存視圖狀態並在用戶訪問多個其他頁面後進行恢復?

+0

你的負載有多慢?有沒有更好的解決方案來加快/分頁客戶網格查詢?你有多少條記錄正在返回? – Paddy

+0

不幸的是,數據存在於通過Connx ODBC驅動程序訪問的Vax平面文件中。我會研究優化,但Vax和Connx是我不太熟悉的領域。優化可能不像SQL Server那樣簡單,我可以根據需要添加索引。 – DeveloperDan

回答

0

Viewstate是管理會話狀態的客戶端方式。

它在html呈現的頁面內注入代碼。

所以當用戶關閉瀏覽器狀態不會持久。

如果你想節省跨瀏覽器會話狀態有兩種方式:

  • 繼續將其存儲在數據庫中。
    如果您有性能問題,請考慮使用ASP.NET緩存

  • 將您的信息存儲在cookie中。

+0

我沒有試圖在瀏覽器關閉或瀏覽器會話之後恢復狀態。在同一個會話中,我想在其他頁面被訪問後恢復viewstate。我看到的問題是viewstate通常只用於回發。我想做一些不可能的事情嗎? – DeveloperDan

+0

我明白了。也許看看[在服務器上保持視圖狀態](http://msdn.microsoft.com/en-us/magazine/cc188774.aspx#S6)。 –

+0

但我認爲最好的方法來處理你的場景「目前我通過重新查詢數據庫來填充網格來恢復狀態,但頁面加載速度太慢,而是想保存會話變量中的viewstate並將其恢復爲用戶重新訪問該頁面「正在使用db + cache或cookie。 –