ASP.NET为一个控件提供了多个控件ID错误

时间:2012-06-15 19:24:20

标签: c# asp.net

我想动态地将控件添加到占位符,如下所示:

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部分的必要性。

3 个答案:

答案 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);
    }