如何在页面回传后保持动态添加的用户控件状态?

4

我有一个用户控件,里面只包含一个文本框,在另一个表格上我以动态方式添加了这个用户控件,用户可以添加多个用户控件。我使用会话变量来重新创建用户控件(也许这种方法听起来不太好)。重新创建控件后,文本框的值消失了,显然。有没有办法在postback时维护用户控件的状态?


可能重复的问题:在ASP.NET中动态添加控件 - Wim Ombelets
视图状态是首选方法。 - Simon Mourier
4个回答

7

这似乎是很好的建议;然而,在此阶段,所有控件仍为“null”。那么,您如何向例如空的“Placeholder”控件添加动态控件? - Jonathan Wood

4

我之前也遇到了同样的问题。

我的解决办法是给动态添加的控件添加一个ID,并确保在postback时保留该ID(在我的情况下,我将所有信息保存在会话中,并重新创建控件)。

一旦postback的控件与之前具有相同的ID,Microsoft就会自动进行魔法般的操作,并使用pre-postback值重新填充控件。


我知道这篇文章有点旧了。但如果您能提供一个示例,那就太好了。我在这里有一个几乎相似的问题:http://stackoverflow.com/questions/40058699/how-to-re-use-already-bound-data-in-a-user-control-on-post-back我能够将其存储在会话中,但我无法将其绑定。 - thebenman

0

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

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

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


请修正您的语法;您没有使用大写字母,没有标点符号,语句语法也很糟糕。如果没有人能够理解您的回答,那么它就是无用的。 - ragingasiancoder

0

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

您可以在此处查看一个良好的示例:ASP.net教程 缓存和对象缓存。

我现在也正在学习asp.net,并发现这是一个很好的解释。我还使用了Microsoft Library


7
不要这样做 :-) 缓存不应该被用作主要存储,只能用于某些需要时可以放回的内容。如果ASP.NET进程因某种原因决定重新启动,缓存可能会消失,而会话和视图状态将会保存。 - Simon Mourier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接