在asp.net上使用ajax创建动态控件

时间:2009-04-30 17:25:36

标签: c# asp.net ajax dynamic controls

我的页面上有添加和删除按钮。 “添加”按钮会在我的页面上的新行中添加一个复选框,两个文本框和一个下拉列表。 删除按钮将删除它们。 通过关注Joe Stagner's example,我可以很好地运行。

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

我在创建对象时尝试添加事件处理程序,但似乎没有触发?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

听起来您有页面生命周期问题。

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

  • 为每个用户控件分配唯一ID。
  • 在Page_Load或Page_Init Events上重新加载用户控件。

并且为了让我更容易,我建议将加载抽象为您将从之前提到的Page_Load和Page_Init调用的函数,此函数将检查是否已加载目标用户控件并将再次为您加载,这样做,您将加载的用户控件ID存储在Session或viewstate中。

希望这会有所帮助。

答案 4 :(得分:0)

如果你想在没有自动回发的情况下这样做,你可以删除自动回发和抛出ASP按钮。任何runat服务器都应该触发动态事件处理程序。