【问题标题】:Dynamically generated Radio Button calling CheckedChanged event动态生成的 Radio Button 调用 CheckedChanged 事件
【发布时间】:2011-05-20 21:54:18
【问题描述】:

这有点难以解释,所以请多多包涵。

我有一个过程,它生成一些单选按钮并根据正在传递的级别(最多 4 个级别)分配 CheckedChanged 回发事件。当第一级被选中(单选按钮被选中)时,调用回发事件 rb_CheckChanged00() 并检查该项目是否有任何子项,如果有,它将创建更多单选按钮并将 rb_CheckChanged01 分配给 CheckChanged 事件对于这些 - 这部分工作正常。

我遇到的问题是,当我选择已创建的第二个单选按钮(子项)时,它似乎根本没有进入回发事件。当我单击该页面时,该页面正在回发,但一切都会重置,因为它不会进入 rb_CheckChanged01。

我知道这个信息很模糊,但我希望有人知道回发事件是如何工作的,以及我是否以某种方式错误地使用它。

使用:ASP.NET 2.0、IIS7

谢谢。

【问题讨论】:

    标签: asp.net postback


    【解决方案1】:

    看起来子 RB 在能够触发事件之前已被清除。根据我的个人经验,最好跟踪那些动态生成的对象,并在每次回发时重新生成它们。事件将开始触发:)

    【讨论】:

      【解决方案2】:

      大多数情况下,动态创建的控件的事件没有被触发,这是因为控件在回发时被“重置”。

      为确保每次都创建相同的控件,请确保在加载 ViewState 之前,每次都将控件的 ID 设置为相同的值。这样,当控件被添加到页面的控件集合时,一旦 ViewState 被加载,它将保持它的属性。 (简而言之,只是描述发生了什么)

      我读过的关于这个主题的最好的文章之一是this one。请务必阅读它,以充分了解背景中发生的事情。

      【讨论】:

      • 已排序。我现在根据存储在会话中的 ID 在每次回发时生成我的单选按钮。它们具有与发布时完全相同的 ID,并且一切正常。感谢您的帮助。
      【解决方案3】:

      只有一件事会导致这种情况,您在 page_load 上创建 rb 并且不要将它们添加到 List 或类似的东西以及该对象到 Session。您需要做的是当您创建项目时,将它们添加到列表并将该列表添加到 Session["RadioButtons"] 并且如果 Page.IsPostBack 为真,则从保存在列表中的列表中一一加载您的控件您的会话到您的页面。

      【讨论】:

        【解决方案4】:

        您的控件和事件未在 ViewState 中注册,因为需要在 Page_Init 中加载动态控件。因为它们没有保留在 ViewState 中,所以它们不会被注册到事件中。一个类似的问题:

        Problem with dynamic controls in .NET

        【讨论】:

          猜你喜欢
          • 2011-02-02
          • 2021-07-26
          • 1970-01-01
          • 2020-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多