【问题标题】:Asp.Net: dynamically created controls stop working after first PostBackAsp.Net:动态创建的控件在第一次 PostBack 后停止工作
【发布时间】:2015-01-02 21:18:18
【问题描述】:

我有一个在 Page_Load 处理程序中动态创建列表、按钮和文本字段的页面。当您单击该按钮时,文本框中的文本将添加到列表中,并通过清除页面的控件集合然后重新添加所有必需的控件来重新创建所有内容。
所以基本上,每次回发都会创建两次按钮(首先在 Page_Load 中,然后在 Button_Click 处理程序中)。

这仅适用于第一个 PostBack。如果您再次尝试,Button_Click 处理程序将永远不会被调用(尽管动态控件会在 PostBack 上重新创建)。
我在这里想念什么? Button_Click 事件是否仍然连接到第一个按钮(通过 Controls.Clear() 丢弃的那个)?

【问题讨论】:

    标签: asp.net dynamic controls postback


    【解决方案1】:

    Page_Load 来不及创建按钮;它应该在 Page init 或 preinit 中。如果你读取了按钮,在清除它之后,你也必须读取事件处理程序。

    【讨论】:

    • 我已经用 Page_Init 试过了。控件已正确重新创建,但 Button_Click 仍然无法处理第二个 PostBack...
    【解决方案2】:

    我终于弄清楚问题的原因是什么:当控件被多次创建时,事件处理程序(例如 Button.Click)也被多次注册。我不知道为什么,但这会导致所有这些都停止工作。换句话说,已释放 Button 的事件会以某种方式干扰实际 Button 的事件。
    我通过确保处理程序只注册一次(在 Page_Load 中)解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多