2009-10-08 53 views
0

所以我盡了最大努力將我的ASP.net ajax應用程序的視圖狀態最小化,http壓縮,在隱藏字段中禁用視圖狀態,但想進一步。所以,研究後,似乎有兩種方法沒有會話的asp.net服務器端viewstate

一)使用,它使用的LoadPageStateFromPersistenceMedium

B中的ASP.net 1.x的方式),或使用ASP.net 2.x的方式SessionPageStatePersister

所以B看起來不太好,因爲如果我理解正確,視圖狀態將鏈接到會話ID,並且由於我的會話可能由於許多原因而過期,所以我不希望這樣做。

那麼,什麼是最好的方法來保存viewstate在服務器上,取決於會話?

如果它是LoadPageStateFromPersistenceMedium並使用隱藏字段,那麼如何將帶有隨機id的隱藏字段注入頁面?

如何確定何時清除服務器上的viewstate文件?

+1

如果你希望儘量減少狀態,你認爲ASP.NET MVC? – 2009-10-08 21:11:51

回答

0

我認爲你應該認真考慮Session選項。它在資源方面是最佳的,即使會話過期,如果您的Auth機制被超過會話超時,這也不是問題。

http://professionalaspnet.com/archive/2006/12/09/Move-the-ViewState-to-Session-and-eliminate-page-bloat.aspx

作爲備用,你可以實現一個使會話ID到ViewState中,檢查它回傳一個頁面基地和比做一些動作來恢復,如果它是不同的。

你唯一的選擇是創建自己的使用數據庫或其他數據存儲的PageAdapter。

+0

我們使用表單身份驗證,所以我不認爲它對齊會話超時。 你在 http://aspnet.4guysfromrolla.com/articles/011707-1.aspx ,他們做出了自己的FileSystemPageStatePersister類想到這個辦法是什麼。 您是否認爲這樣可以在網絡農場上更好地工作? – Tuviah 2009-10-08 22:02:35

+0

只需使用SQL Server進行會話持久性或在單臺計算機上使用該服務,並且該服務將在Web場上完美地工作。 – 2009-10-08 22:31:55

+0

另一個問題是會話默認20分鐘後過期。當然,我們可以擴展它,但這隻會佔用更多的內存。用戶多次來回點擊,在瀏覽器之間切換或刪除它們的Cookie也會產生問題。 我讀過,可以編寫自己的PageStatePersister,它可以生成一個GUID,將其附加到頁面上的隱藏字段,然後使用GUID作爲關鍵字將viewstate保存到數據庫或文件中。 這會是一個更好的方法嗎? – Tuviah 2009-10-08 23:21:45