2010-12-06 40 views
0

这有点难以解释,所以请耐心等待。动态生成单选按钮调用CheckedChanged事件

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

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

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

使用:ASP.NET 2.0,IIS7

谢谢。

回答

2

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

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

我读到过的最好的文章之一是this one。确保你阅读它,以充分理解背景中发生了什么。

+0

排序。我现在根据存储在会话中的ID在每个回发中生成我的单选按钮。他们的ID与发布时的ID完全相同,都在工作。谢谢你的帮助。 – webnoob 2010-12-06 11:26:19

1

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

0

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

1

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

Problem with dynamic controls in .NET

相关问题