【问题标题】:Maintain the state of dynamically added user control on postback?在回发时保持动态添加的用户控件的状态?
【发布时间】:2013-01-08 13:30:13
【问题描述】:

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

【问题讨论】:

标签: c# asp.net user-controls


【解决方案1】:

如果您在正确的Page Life Cycle 事件(PreInit) 期间将动态控件添加回控件,它们将通过IPostBackDataHandler 接口保持其状态。

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

【讨论】:

  • 这似乎是个好建议;但是,在这个阶段,所有的控件仍然是null。那么如何将动态控件添加到例如为空的Placeholder 控件?
【解决方案2】:

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

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

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

【讨论】:

  • 我知道这是一篇老帖子。但如果你能帮我举个例子就好了。我在这里有几乎类似的问题。 stackoverflow.com/questions/40058699/…我可以将它存储在会话中,但我无法绑定它。
【解决方案3】:

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

你可以在ASP.net-Tutorials Cache and Object Cache.看到一个很好的例子:ASP.net-Tutorials Cache and Object Cache.

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

【讨论】:

  • 不要这样做 :-) 缓存永远不应该用作主存储,仅用于在需要时可以放回的东西。如果 ASP.NET 进程出于某种原因决定回收,缓存可以消失,而会话和视图状态将继续存在。
【解决方案4】:

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

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

查看这篇文章以了解如何编写动态控制代码 - How to maintain dynamic control events, data during postback in asp.net

【讨论】:

  • 请修正你的语法;你没有大写、没有标点符号和糟糕的句法。如果没有人能理解,你的答案是没有用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 2016-04-12
  • 1970-01-01
相关资源
最近更新 更多