我有一个只包含文本框的用户控件,而在另一个表单上我动态添加了这个用户控件,用户可以多次添加用户控件。我使用会话变量来重新创建用户控件(也许这种方法听起来不太酷)。重新创建控件后,文本框的值显然会消失。是否有任何解决方案可以在回发时维护用户控件的状态?
答案 0 :(得分:7)
如果您在正确的Page Life Cycle事件(PreInit
)期间将动态控件添加回控件,则他们将通过IPostBackDataHandler
界面维护其状态。
PreInit - 创建或重新创建动态控件。
答案 1 :(得分:3)
我过去遇到过同样的问题。
我所做的是给动态添加的控件一个ID ,并确保它在回发时也保留了该ID(在我的情况下,我保留了会话中的所有信息,并且创建了控件)。
一旦回发的控件具有与之前相同的ID,Microsoft就会做出魔术,并使用回发前的值重新填充控件。
答案 2 :(得分:0)
使用对象缓存。将usercontrol添加到缓存中并在需要时检索它。
你可以在ASP.net-Tutorials Cache and Object Cache.
看到一个很好的例子我现在也在学习asp.net,并发现了很好的解释。我还使用了Microsoft Library
答案 3 :(得分:0)
继承 IPostBackDataHandler 接口的每个服务器控件都有一个处理回发数据的 LoadPostData 方法。当控件由类(页面,表单,占位符,控件等)实现时,该类调用 LoadPostData 方法并传递发布的数据和键以保持控制状态。
您需要做的就是在回发期间每次在页面加载事件之前或之内重新实例化/重新初始化动态控件,并将此控件添加到页面/表单/占位符。然后,通过父控件调用LoadPostData方法,将自动将发布的数据分配给控件。
查看本文以了解如何编写用于动态控制的代码 - 的 How to maintain dynamic control events, data during postback in asp.net 强>