簡體   English   中英

ASP.NET Server控件-控件之間是否可以共享Viewstate

[英]ASP.NET Server Control - Is shared Viewstate between controls possible

如果我有一個具有多個子自定義控件的主“復合自定義服務器控件”,則該主控件是否可以與子控件(也是自定義復合服務器控件)共享其視圖狀態,(所有控件都是復合控件)自定義服務器控件)?

要進一步擴展,請說我有一個Person控件, Address控件, Phone控件和Notes控件。 AddressPhoneNotes可以作為獨立控件存在,也可以作為Person控件的一部分存在。 由於每個控件負責其自己的視圖狀態,並在其中存儲所需的數據,因此它可以進行渲染/回發等操作,最終,由於Person控件存儲了所有數據,因此視圖狀態中存在重復標記,然后每個子控件再次存儲其自己的數據。 同樣,為了使事情更加復雜, Person Control動態添加了子控件,因此可以添加第二個地址/電話號碼/注釋等,這可能會導致更大的視圖狀態(最大1MB)。

如果所有的Address / Phone / etc控件都是Person控件的子控件,那么我是否可能以某種方式共享常見的viewstate數據,所以我在viewstate中沒有某些東西的2/3/4副本,而當它們不是組件時,只是正常運行?

我確實有一個解決方案的主意,但是它相當討厭,我可以在其中修改Person控件,公開其視圖狀態或數據,然后在子控件中檢查該控件的層次結構,以及該子控件是否是該控件的一部分一個的視圖,不要使用其自己的視圖狀態,而使用暴露的視圖狀態。 這將需要我重做許多現有代碼,如果可能的話,我寧願避免這樣做。

我要問的第一個問題是:“您真正需要在ViewState上保留多少數據?” 例如,在典型的頁面請求中是否有足夠的信息,以能夠重建其中某些控件中的所有信息?

我發現ASP.NET通常使用ViewState的次數遠遠超過了我真正需要的次數,並且如果您獲得1MB的ViewState,我懷疑您可能也是如此。 我強烈建議閱讀本文 ,以更全面地了解ViewState的工作原理,導致值保存到ViewState的原因以及如何避免在不需要的地方使用它。 例如,您可以通過在Page_Init而不是Page_Load中完成更多工作來解決大部分問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM