CheckedChanged事件的复选框未激活动态复选框

时间:2009-12-30 16:50:29

标签: asp.net event-handling checkbox

我似乎在为一组动态复选框获取事件处理程序时遇到问题。代码发布在这里。我认为这将非常简单,复选框不会出现在转发器,数据网格等中。它们出现在一个位于屏幕中心的div内的表中。任何帮助都会非常感激。

            foreach (SelectAssignedRolesByUserResult role in assignedRoles)
            {
                CheckBox cb = new CheckBox();
                cb.ID = string.Format("CheckBox_{0}_{1}", role.role_nm, role.role_id);
                cb.Text = role.role_nm;
                cb.Attributes.Add("role_id", role.role_id.ToString());
                cb.Attributes.Add("assigned_role_id", role.assigned_role_id.ToString());
                cb.Checked = (role.assigned_role_id > 0);
                cb.CheckedChanged += new EventHandler(cb_CheckedChanged);

                TableCell cell = new TableCell();
                TableRow row = new TableRow();

                cell.Controls.Add(cb);
                row.Cells.Add(cell);
                TableAssignedRoles.Rows.Add(row);
            }

2 个答案:

答案 0 :(得分:1)

您没有提到动态添加复选框的代码被调用的位置。我猜你把它放在Page_Load事件处理程序中,或者放在从Page_Load中调用的子中。

如果是这样,请将其从Page_Load移至Page_Init。

这是对此推理的非技术性解释:

这是因为当页面解析Viewstate时是否选择了控件。在页面生命周期中,Page_Init加载初始控件,然后应用视图状态,然后激活Page_Load。

<强>加

不要忘记添加

cb.AutoPostBack = true;

答案 1 :(得分:0)

我们能看到更多代码吗?您在生命周期的哪个阶段调用上面的代码?

如果您没有在每次回发时以完全相同的方式重新创建复选框,以便为每个复选框分配相同的ID并且可以正确加载ViewState,那么您将丢失事件处理程序。