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が必要です。

なんで?ループの各反復で、1つのコントロールのみがそのIDを取得する必要があります。

編集:私は実際にループをテストすることができなかったことに言及する必要があります、fileCountが1の場合でもエラーが発生します。

解決策:この関数は、ページの読み込みの「foreach」ループの外にあると思ったときに呼び出しました。それでも、clear()メソッドを念頭に置くと、関数のaddat部分が不要になります。

4

3 に答える 3

2

追加を開始する前に、クリアを実行してください。

PlaceHolder1.Controls.Clear();

add ステートメントは次のように簡略化できます。

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 に答える