如何访问动态生成的控件不知道他们的名字

时间:2013-05-22 05:33:53

标签: asp.net

我的页面在运行时生成一个复选框列表。我通过为每个string.Format(“checkbox_ {0},n}”分配每个这样的盒子的Id,其中n是一个运行数字。

如何从代码隐藏中找出复选框控件列表?我在Page.Form.Controls中找不到它们。它们放在哪里?

(我可以在Request.Form中查看已选中的复选框,但其中包含每个控件的客户端名称。)

感谢。

-

---更多信息----

我的迭代循环将CheckBoxes添加到Panel控件(在标记页面中创建),如下所示:

CheckBox checkbox = new CheckBox();
checkbox.Text = "Add to list";
checkbox.ID = string.Format("checkbox_{0}", n.ToString("0"));
Panel1.Controls.Add(checkbox);

复选框很好地显示在页面上。我可以打勾。当我提交Http POST流包含所有那些勾选的。

在回发后,Panel1.Controls.Count为0.当首次生成页面时,Panel1.Controls.Count为200,因为它包含大量LieteralControls用于布局。

2 个答案:

答案 0 :(得分:0)

您可以在页面对象或父控件对象上使用findcontrol方法来查找该复选框对象。像:

CheckBox chx=(CheckBox)Page.FindControl("Checkbox1");
if(chx!=null)
chx.Checked = false;

你可以将这个insode放在循环中,如:

for(int i=0;i<n;i++)
{
CheckBox chx=(CheckBox)Page.FindControl("Checkbox"+n);
if(chx!=null)
chx.Checked = false;
}

答案 1 :(得分:0)

  

在回发后,Panel1.Controls.Count为0.当首次生成页面时,Panel1.Controls.Count为200,因为它包含大量LieteralControls用于布局。

如果以这种方式动态添加控件,则需要在每次回发时再次添加它们(相同的ID,相同的顺序)。

这意味着您需要保留所需的任何信息才能再次添加它们。例如,您可以在ViewState中存储复选框的数量,然后在每个帖子上重新生成该数量的复选框。