1

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

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 '123456abcdef0' 的多个控件。FindControl 要求控件具有唯一的 ID。

为什么?在循环的每次迭代中,只有一个控件应该获得该 ID。

编辑:应该提到我实际上无法测试循环,即使 fileCount 为 1,我也会收到错误消息。

解决方案:当我认为它在页面加载之外时,我从页面加载中的“foreach”循环中调用了这个函数。尽管如此,记住 clear() 方法将消除函数 addat 部分的必要性。

4

3 回答 3

2

在开始添加之前先做清楚:

PlaceHolder1.Controls.Clear();

您的添加语句可以简化如下:

FileUpload fu = new FileUpload();
fu.Id = "123456abcdef" + i;
PlaceHolder1.Controls.Add(fu);
于 2012-06-15T19:32:47.307 回答
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); 
}

希望这可以帮助!!

于 2012-06-15T19:29:38.353 回答
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);
    }
于 2012-06-15T19:30:12.767 回答