2011-11-17 61 views
2

我想了解SessionPageStatePersister如何與Web瀏覽器,ViewState和SessionState進行交互。我一直認爲使用指定SessionPageStatePersister(而不是HiddenFieldPageStatePersister)的PageAdapter會將所有ViewState存儲到SessionState中。爲什麼ASP.Net SessionPageStatePersister.ControlState存儲在Page.RequestViewStateString中而不是在SessionState中?

檢查Reflector中的SessionPageStatePersister之後,我開始質疑這個假設。在查看SessionPageStatePersister的Save方法時,SessionPageStatePersister.ControlState屬性仍然存儲在RequestViewStateString(SessionPageStatePersister.ViewState存儲在SessionState中)。

任何人都可以對此ControlState信息沒有存儲在SessionState嗎?看起來,需要存儲在RequestViewStateString中的唯一數據是SessionState鍵的日期戳記:"__SESSIONVIEWSTATE" + Convert.ToString(DateTime.Now.Ticks, 16)

回答

1

是的,控制狀態保持在頁面上,默認情況下與請求/響應一起上下移動。我同意這似乎是毫無意義的,但你可以克服這個由標誌添加到的browserCaps部分在你的web.config在這篇文章中提到:

http://szokelizer.blogsome.com/2006/11/09/how-to-put-controlstate-into-viewstate-and-how-to-put-viewstate-into-session/

退房朝端的信息的一部分你需要。

我向團隊建議他們默認打開此設置。也許如果你把問題投票給他們,他們會!這裏的鏈接爲:

http://aspnet.uservoice.com/forums/41202-asp-net-webforms/suggestions/2454872-make-httpcapabilitiesbase-requirescontrolstateinse

+0

謝謝!我測試了您的解決方案,現在頁面中的__VIEWSTATE隱藏字段很少。它看起來應該是默認情況下發生的。 –

相關問題