繁体   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