在回发时保持动态添加用户控件的状态?

我有一个只包含文本框的用户控件,在另一个表单上我动态添加了这个用户控件,用户可以多次添加用户控件。 我使用会话变量来重新创建用户控件(也许这种方法听起来不太酷)。 重新创建控件后,文本框的值显然会消失。 是否有任何解决方案来维护用户控件的回发状态?

我过去也遇到过同样的问题。

我所做的是给动态添加的控件一个ID ,并确保它也在回发时保留该ID(在我的情况下,我保留了会话中的所有信息,并重新创建了控件)。

一旦回发的控件具有与之前相同的ID,Microsoft就会做出魔术,并使用回发前的值重新填充控件。

如果在正确的页面生命周期事件( PreInit )期间将动态控件添加回控件,则它们将通过IPostBackDataHandler接口维护其状态。

PreInit – 创建或重新创建动态控件。

使用对象缓存。 将usercontrol添加到缓存中并在需要时检索它。

你可以看到一个很好的例子,它是如何工作的: ASP.net-Tutorials Cache和Object Cache。

我现在也在学习asp.net,发现了很好的解释。 我还使用了Microsoft Library

inheritanceIPostBackDataHandler接口的每个服务器控件都有一个处理回发数据的LoadPostData方法。 当控件由类(页面,表单,占位符,控件等)实现时,该类调用LoadPostData方法并传递发布的数据和键以维护控件状态

需要做的就是在回发期间每次在页面加载事件之前或之内重新实例化/重新初始化动态控件 ,并将此控件添加到页面/表单/占位符。 然后,通过父控件调用LoadPostData方法,将自动将发布的数据分配给控件。

查看本文以了解如何编写动态控件代码 – 如何在asp.net中回发期间维护动态控件事件和数据