我有一个用户控件,里面只包含一个文本框,在另一个表格上我以动态方式添加了这个用户控件,用户可以添加多个用户控件。我使用会话变量来重新创建用户控件(也许这种方法听起来不太好)。重新创建控件后,文本框的值消失了,显然。有没有办法在postback时维护用户控件的状态?
我有一个用户控件,里面只包含一个文本框,在另一个表格上我以动态方式添加了这个用户控件,用户可以添加多个用户控件。我使用会话变量来重新创建用户控件(也许这种方法听起来不太好)。重新创建控件后,文本框的值消失了,显然。有没有办法在postback时维护用户控件的状态?
我之前也遇到了同样的问题。
我的解决办法是给动态添加的控件添加一个ID,并确保在postback时保留该ID(在我的情况下,我将所有信息保存在会话中,并重新创建控件)。
一旦postback的控件与之前具有相同的ID,Microsoft就会自动进行魔法般的操作,并使用pre-postback值重新填充控件。
每个继承了IPostBackDataHandler接口的服务器控件都有一个LoadPostData方法来处理回发数据。当控件被类(页面、表单、占位符、控件等)实现时,该类调用LoadPostData方法并传递已发布的数据和关键字以维护控件状态。
您所需要做的就是在每次回发期间的页面加载事件之前或之内重新实例化/重新初始化动态控件,并将此控件添加到页面/表单/占位符中。然后通过父控件调用LoadPostData方法自动将发布的数据分配给控件。
查看本文以了解如何编写动态控件的代码 - 如何在asp.net中在回发期间维护动态控件事件和数据
使用对象缓存。将用户控件添加到缓存中,并在需要时检索它。
您可以在此处查看一个良好的示例:ASP.net教程 缓存和对象缓存。
我现在也正在学习asp.net,并发现这是一个很好的解释。我还使用了Microsoft Library。