这有点难以解释所以请耐心等待。
我有一个生成一些单选按钮并根据传递的级别(最多4个级别)分配CheckedChanged回发事件的过程。当选中第一级(选择单选按钮)时,将调用回发事件rb_CheckChanged00()并检查此项是否包含任何子项,如果有,则会创建更多单选按钮并将rb_CheckChanged01分配给CheckChanged事件对于这些 - 这部分工作正常。
我遇到的问题是当我选择已创建的第二个单选按钮(孩子)时,它似乎根本没有进入回发事件。当我点击它时页面会回发但是一切都会重置,因为它不会进入rb_CheckChanged01。
我知道这个信息很模糊,但我希望有人知道回发事件是如何运作的,以及我是否以某种方式错误地使用它。
使用:ASP.NET 2.0,IIS7
感谢。
答案 0 :(得分:2)
大多数情况下,动态创建的控件的事件未被触发,这是因为控件在回发时被“重置”。
要确保每次都要创建相同的控件,并确保在加载ViewState之前每次都将控件的ID设置为相同的值。这样,当控件添加到页面的控件集合中时,一旦加载了ViewState,它就会保留它的属性。 (只是为了描述会发生什么,简而言之)
我在这个主题上读过的最好的文章之一是this一篇。请务必阅读,以充分了解后台发生的情况。
答案 1 :(得分:1)
看起来子RB在能够触发事件之前被清除。根据我的个人经验,最好跟踪那些动态生成的对象,并在每次回发中重新生成它们。事件将开始触发:)
答案 2 :(得分:1)
您的控件和事件未在ViewState中注册,因为需要在Page_Init中加载动态控件。因为它们不会保留在ViewState中,所以它们不会在事件中注册。一个类似的问题:
答案 3 :(得分:0)
只有一件事可能导致这种情况,你在page_load上创建rb并且不要将它们添加到List<>或类似的东西和Session的对象。您需要做的是创建项目,将它们添加到列表并将该列表添加到Session [“RadioButtons”],如果Page.IsPostBack为true,则从列表中逐个加载控件你的会话到你的页面。