2009-04-30 27 views
1

我有在我的页面上添加和删除按钮。 添加按钮将一个复选框,两个文本框和一个下拉列表添加到我的页面上的新行。 删除按钮删除它们。 我通过关注Joe Stagner's example可以很好地运行。在asp.net上使用ajax创建动态控件

问题: 动态创建的控件在选中时(对于复选框)都需要触发相同的事件,对于选定的索引更改(对于下拉列表)也是如此。

我试图添加事件处理程序,当我创建一个对象,但它似乎并没有火?

+1

如果您需要帮助,请展示您的工作。 – Kon 2009-04-30 17:27:29

+0

问题解决了。 AutoPostBack = true在生成的控件上丢失。对不起,伙计们,asp.net对我来说是非常新的。我现在应该给谁正确的答案标记? :S – Ivan 2009-04-30 20:18:51

回答

1

我想你可能会遇到这样一个事实,即每次发布页面时,页面都会被完全重新创建 - 本质上页面必须重复页面上的控件,才能尝试提供回发(和事件) 给他们。我认为你可能需要做的是向你的page_load添加代码,它将重新创建动态创建的控件,使用与它们相同的id,并注册事件处理程序。

1

听起来像你有一个页面生命周期问题。

对于动态创建的触发事件的控件,您应该在页面的PreInit事件中创建它们。

这是Asp.net页面生命周期的cheat sheet的链接。

1

您需要以某种方式[会话,视图状态等]为每个页面加载持久化动态创建的控件。重新创建动态控件并使用preInit函数中的每个页面加载上的委托重新绑定事件。

1

是的, 就像所有的说,这是生命周期问题。当您动态加载用户控件时,应始终执行以下操作。

  • 为每个用户控件分配一个唯一的ID。
  • 重新加载Page_Load或Page_Init事件中的用户控件。

,并让这一切更简单,我建议抽象加载到您将的Page_Load和Page_Init如前所述调用一个函数,这个函数会检查是否兴田目标用户控件加载,并再次将其装入为为此,您需要将加载的用户控件ID存储在Session或viewstate中。

希望这有助于。

0

如果你想这样做没有自动回发你可以删除自动回发,并扔在那里的ASP按钮。任何runat服务器都应该关闭动态事件处理程序。