我似乎在为一组动态复选框获取事件处理程序时遇到问题。代码发布在这里。我认为这将非常简单,复选框不会出现在转发器,数据网格等中。它们出现在一个位于屏幕中心的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);
}
答案 0 :(得分:1)
您没有提到动态添加复选框的代码被调用的位置。我猜你把它放在Page_Load事件处理程序中,或者放在从Page_Load中调用的子中。
如果是这样,请将其从Page_Load移至Page_Init。
这是对此推理的非技术性解释:
这是因为当页面解析Viewstate时是否选择了控件。在页面生命周期中,Page_Init加载初始控件,然后应用视图状态,然后激活Page_Load。
<强>加强>
不要忘记添加
cb.AutoPostBack = true;
答案 1 :(得分:0)
我们能看到更多代码吗?您在生命周期的哪个阶段调用上面的代码?
如果您没有在每次回发时以完全相同的方式重新创建复选框,以便为每个复选框分配相同的ID并且可以正确加载ViewState,那么您将丢失事件处理程序。