我想动态地将控件添加到占位符,如下所示:
int fileCount = Convert.ToInt32(lblCount.Text);
for (int i = 0; i<fileCount ; i++)
{
FileUpload fu = new FileUpload();
if(PlaceHolder1.HasControls())
PlaceHolder1.Controls.AddAt(i,fu);
else
PlaceHolder1.Controls.Add(fu);
PlaceHolder1.Controls[i].ID = "123456abcdef" + i;
}
但是我收到了错误
具有相同ID的多个控件&#39; 123456abcdef0&#39;被找到。 FindControl要求控件具有唯一ID。
为什么呢?只有一个控件应该在循环的每次迭代中获得该ID。
编辑:应该提到我实际上无法测试循环,即使fileCount为1,我也会收到错误。
解决方案:我从一个&#34; foreach&#34;在页面加载时循环,当我认为它在它之外时。尽管如此,记住clear()方法将消除函数的addat部分的必要性。
答案 0 :(得分:2)
在开始添加之前先做好准备:
PlaceHolder1.Controls.Clear();
您的添加语句可以简化如下:
FileUpload fu = new FileUpload();
fu.Id = "123456abcdef" + i;
PlaceHolder1.Controls.Add(fu);
答案 1 :(得分:0)
据我所知,您可以尝试下面的内容。
int fileCount = Convert.ToInt32(lblCount.Text);
for (int i = 0; i<fileCount ; i++)
{
FileUpload fu = new FileUpload();
fu.ID = "123456abcdef" + i;
PlaceHolder1.Controls.Add(fu);
}
希望这有助于!!
答案 2 :(得分:0)
更改为:
int fileCount = Convert.ToInt32(lblCount.Text);
for (int i = 0; i<fileCount ; i++)
{
FileUpload fu = new FileUpload();
fu.ID = string.Format("fu_{0}", i);
PlaceHolder1.Controls.Add(fu);
}