【问题标题】:creating dynamic controls using ajax on asp.net在 asp.net 上使用 ajax 创建动态控件
【发布时间】:2010-10-22 22:16:14
【问题描述】:

我的页面上有添加和删除按钮。 添加按钮将一个复选框、两个文本框和一个下拉列表添加到我页面上的新行。 删除按钮删除它们。 通过关注Joe Stagner's example,我运行良好。

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

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

【问题讨论】:

  • 如果您需要帮助,请展示您的作品。
  • 问题已解决。生成的控件上缺少 AutoPostBack=true。对不起,asp.net 对我来说很新。我现在应该给谁正确的答案? :S
  • 给自己,兄弟,别忘了为我们的答案投票 :)

标签: c# asp.net ajax dynamic controls


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    听起来您遇到了页面生命周期问题。

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

    这是一个指向 cheat sheet 的链接,用于 Asp.net 页面生命周期。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        希望这会有所帮助。

        【讨论】:

        • ID 被赋予每个控件,并且所有控件都在 OnInit 上重新加载,它只是不会触发
        • 我的问题中有一个指向 Joe Stagner 的示例代码(c# 和 vb)的链接。这是相同的概念,所以如果你能告诉我,例如,我需要做什么才能拥有相同的事件,让我们说为任何给定的动态创建的文本框触发文本框控件的 onTextChange
        【解决方案5】:

        如果您想在没有自动回发的情况下执行此操作,您可以删除自动回发并在那里抛出和 ASP 按钮。任何 runat 服务器都应该触发您的动态事件处理程序。

        【讨论】:

          猜你喜欢
          • 2017-07-22
          • 2010-12-02
          • 1970-01-01
          • 2014-01-24
          • 1970-01-01
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多