Asp.net 如何在不知道控件名称的情况下访问动态生成的控件
我的页面在运行时生成复选框列表。我通过为每个框指定string.Format(“checkbox_{0},n}”,其中n是一个运行的数字)来手动设置这些框的Id 如何从codebehind中找到复选框控件列表?我在Page.Form.controls中找不到它们。它们放在哪里 (我可以在Request.Form中看到复选框,但其中包含每个控件的客户端名称。) 谢谢 - ---更多信息---- 我的迭代循环将复选框添加到面板控件(在标记页面中创建),如下所示:Asp.net 如何在不知道控件名称的情况下访问动态生成的控件,asp.net,Asp.net,我的页面在运行时生成复选框列表。我通过为每个框指定string.Format(“checkbox_{0},n}”,其中n是一个运行的数字)来手动设置这些框的Id 如何从codebehind中找到复选框控件列表?我在Page.Form.controls中找不到它们。它们放在哪里 (我可以在Request.Form中看到复选框,但其中包含每个控件的客户端名称。) 谢谢 - ---更多信息---- 我的迭代循环将复选框添加到面板控件(在标记页面中创建),如下所示: CheckBox checkbox
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,因为它包含许多用于布局的远程控件。您可以在页面对象或父控件对象上使用findcontrol方法查找该复选框对象。例如:
CheckBox chx=(CheckBox)Page.FindControl("Checkbox1");
if(chx!=null)
chx.Checked = false;
您可以将其放入循环中,如下所示:
for(int i=0;i<n;i++)
{
CheckBox chx=(CheckBox)Page.FindControl("Checkbox"+n);
if(chx!=null)
chx.Checked = false;
}
for(int i=0;i
在回发时,Panel1.Controls.Count为0。当页面第一次生成时,Panel1.Controls.Count为200,因为它包含许多用于布局的LieteralControls
如果以这种方式动态添加控件,则需要在每次回发时再次添加它们(相同的ID,相同的顺序)
这意味着您需要保留再次添加它们所需的任何信息。例如,您可以在ViewState中存储复选框的数量,然后在每次回发时重新生成该数量的复选框。谢谢。但我在Page.FindControl或Page.Form.FindControl中找不到它们。我必须设置任何页面设置才能使其正常工作。您能显示这些设置吗在页面上动态添加复选框的e代码。您在哪个父控件中添加复选框?我在我的原始帖子中添加了更多信息。谢谢。谢谢。但我真正想要的是读取复选框的状态并继续处理它们。现在我看不到它们。动态创建的复选框不是p吗返回到ViewState?ASP.NET不应该与Http POST数据结合以确定每个复选框的状态吗?发现:读取动态创建的控件的值似乎不是那么简单。@OldGeezer-主要的限制是每次回发后都需要重新创建控件树。我不认为e是完全准确的-我相信你可以在初始化阶段之后添加动态控件。据我所知,动态控件不在ViewState中,这就是为什么必须手动创建它们。然后用户提交的值必须填充到重新创建的控件上。我的问题是从何处获取这些值ViewState,或从Request.Forms?@OldGeezer用户提交的值是从Request.Forms`.填充的。ViewState保存对服务器上控件属性所做的更改。对于静态控件和动态控件也是如此。