动态生成的单选按钮调用CheckedChanged事件

时间:2010-12-06 10:37:45

标签: asp.net postback

这有点难以解释所以请耐心等待。

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

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

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

使用:ASP.NET 2.0,IIS7

感谢。

4 个答案:

答案 0 :(得分:2)

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

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

我在这个主题上读过的最好的文章之一是this一篇。请务必阅读,以充分了解后台发生的情况。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

Problem with dynamic controls in .NET

答案 3 :(得分:0)

只有一件事可能导致这种情况,你在page_load上创建rb并且不要将它们添加到List<>或类似的东西和Session的对象。您需要做的是创建项目,将它们添加到列表并将该列表添加到Session [“RadioButtons”],如果Page.IsPostBack为true,则从列表中逐个加载控件你的会话到你的页面。