我想存儲一些變量,這些變量將在整個生命週期中被引用,從PreInit事件中的db訪問開始。 ViewState不是一個選項,因爲如果在頁面生命週期中這麼早保存,ViewState將不會保留。由於數據不應該被用戶改變,那麼最好的選擇是什麼?ViewState的替代方案
回答
您可以使用會話來存儲您的數據。我不確定你係統的用戶數量,但假設你想存儲的數據很小,這不會是一個問題。'此外,除非您使用SessionPageStatePersister(或其他服務器端持久存儲器)或加密ViewState,否則用戶仍可能更改ViewState。這可能會更困難,但仍然有可能。默認情況下,ViewState使用HiddenFieldPageStatePersister,並將ViewState存儲在每個頁面的隱藏字段中(作爲編碼字符串)。只是值得考慮的事情。
您可以將數據存儲在隱藏字段中,如果您想隱藏它,那麼您可以ld使用某種咒語。當然,這些值也只會在頁面生命週期的後期階段加載。會話對象將是明顯的選擇,儘管這不是每個人都喜歡的方法。
會話可能在PreInit中不可用,但您可以將它們存儲在變量中,直到稍後的頁面生命週期任務,然後將它們存儲在會話中。我可能會錯誤的會話功能。此外,緩存是一個選項,但緩存不是用戶特定的;您可以通過附加他們的用戶ID或會話ID來使其成爲特定用戶。
會議可能是你最好的選擇。我們必須使用會話來存儲一些用戶信息,但由於訪問得太早而出現了一個錯誤。該錯誤是[HttpException]: Session state has created a session id, but cannot save it because the response was already flushed by the application."
但它通常會顯示爲PageRequestMangerParserErrorException。超級好玩的狩獵下來。一個hackish的解決方法是編寫到您的Global.asax代碼背後:
public Session_Start(object sender, EventArgs e)
{
string sessionId = Session.SessionID;
}
訪問的SessionID強制ASP.NET引擎去它通常會之前建立的會話,從而能夠及早使用它。
在會話(或應用程序)之外,您有兩個其他選項:客戶端存儲和永久存儲。後者是一種奇特的說法:「把它塞入數據庫中」,當然也有類似的選擇。
客戶端存儲與查看狀態相似,但更受控制。您可以使用隱藏字段或Cookie。事實上,一個cookie可能適合你,但如果你想讓用戶獨立,你需要加密其中的信息。無論如何,您發送給客戶的任何內容都必須承擔妥協,因此請始終進行有效性檢查。
- 1. Ember ViewState替代方案
- 2. ASP.NET Webforms中的ViewState替代方案
- 3. playN替代方案
- 4. Example.com替代方案
- 5. TFS替代方案
- 6. WSO2替代方案
- 7. Nginx:more_clear_headers替代方案
- 8. AppDomain.AppendPrivatePath替代方案?
- 9. Javascript。替代方案
- 10. android.net.wifi.WIFI_HOTSPOT_CLIENTS_CHANGED替代方案
- 11. MediaMetadataRetriever替代方案?
- 12. HTMLElementVariable.animate(...)替代方案?
- 13. 替代方案deleteOnExit
- 14. VSTO替代方案
- 15. _path的替代方案
- 16. $ httpProvider.responseInterceptors的替代方案
- 17. SELECT DISTINCT的替代方案
- 18. RPM的fakeroot替代方案
- 19. Treeview的替代方案
- 20. QUnit的替代方案
- 21. gethostbyname的替代方案
- 22. Java.sql.time的替代方案
- 23. Git的StatSVN替代方案?
- 24. ValidateRequest =「false」的替代方案
- 25. Cookie的替代方案
- 26. Android - OpenCV的替代方案?
- 27. JCA的替代方案
- 28. jpeg_read_header的替代方案libjpeg
- 29. iOS3的UILocalNotification替代方案
- 30. JQuery Slider的替代方案?
會議將是我最後的手段,雖然看起來我沒有選擇。 ViewState默認情況下是加密的,所以它是可以改變的,但是如果沒有機器密鑰則不可能一致。我接受你的答案,因爲它是第一個,雖然每個人都說會話。 – Shagglez 2010-10-28 14:52:31