【问题标题】:CheckedChanged event for checkbox not firing for dynamic checkboxes复选框的 CheckedChanged 事件未触发动态复选框
【发布时间】:2012-06-27 20:11:17
【问题描述】:

我在获取一组动态复选框的事件处理程序时似乎遇到了问题。代码发布在这里。我认为这很简单,复选框不会出现在转发器、数据网格等中。它们出现在位于屏幕中心的 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);
            }

【问题讨论】:

  • 这些是用什么方法创建的?页面初始化? page_load?

标签: asp.net event-handling checkbox


【解决方案1】:

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

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

这是一个非常非技术性的解释:

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

已添加

别忘了添加

cb.AutoPostBack = true;

【讨论】:

  • 我应该只是像你一样回答而不是问问题,哈哈。那就为你 +1。
  • 是的,可能。在看到您的评论之前,我确实开始输入答案,所以我没有窃取您的想法,但如果您回答,我会给您一个赞成票。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2015-08-09
    • 2011-11-17
    • 2016-04-13
    相关资源
    最近更新 更多