2011-06-20 13 views
0
public partial class Default2 : System.Web.UI.Page 
{ 
    Dictionary<int, Button> btnsDic = new Dictionary<int, Button>(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      for (int i = 0; i < 2; i++) 
      { 
       Button newBtn = new Button(); 
       newBtn.CommandName = i.ToString(); 
       newBtn.Text = i.ToString(); 
       newBtn.Command += Clicked; 
       btnsDic.Add(i, newBtn); 
       PlaceHolder p = new PlaceHolder(); 
       PlaceHolder1.Controls.Add(newBtn); 
       // p.Controls.Add(newBtn); 

      } 
     } 
     else 
     { 
      Button dsa = new Button(); 
      dsa.Text = "This medsa"; 
      PlaceHolder1.Controls.Add(dsa); 
     } 
    } 

    void Clicked(object sender, CommandEventArgs e) 
    { 
     foreach (var item in btnsDic) 
     { 
      if (e.CommandName==item.Key.ToString()) 
      { 
       Label lebl = new Label(); 
       lebl.Text="Button number: "+e.CommandName+" was pressed"; 
       this.Controls.Add(lebl); 
      } 
     } 

    } 
} 

私はプログラム的に私のプレースホルダを作るのではなく、ポストバック後にページに表示されますtags..nothingの形で私のWebフォーム上に存在するプレースホルダを使用する場合、なぜ質問:「

答えて

0

PlaceHolder p = new PlaceHolder()をループ内で呼び出しています。これは、うまくいけば、2番目のボタンだけがプレースホルダにあることを意味します。また、新しいプレースホルダをページに追加する必要があります。ページに既に配置されているコントロールを追加します。

if (IsPostBack) 
    { 
     PlaceHolder p = new PlaceHolder(); 
     PlaceHolder1.Controls.Add(p); 
     for (int i = 0; i < 2; i++) 
     { 
      Button newBtn = new Button(); 
      newBtn.CommandName = i.ToString(); 
      newBtn.Text = i.ToString(); 
      newBtn.Command += Clicked; 
      btnsDic.Add(i, newBtn); 
      p.Controls.Add(newBtn); 
     } 
    } 
+0

はなぜ詳細については、私はすでにページ上に存在するコントロールに追加する必要がありますか?そうでなければうまくいきませんか? – Matrix001

+0

@ Matrix001 - ASP.NETライフサイクルのレンダリングフェーズが実行されると、コントロールチェーンが実行され、レンダーが呼び出されます。コードの背後に作成されたコントロールをチェーン内のコントロールに追加しないと、ツリーが反復されたときにコントロールが検出されません。 さらに明らかにエンジンは、プログラム上作成されたコントロールをページ上のどこに配置したいのか分からないため、必要な場所に配置する必要があります。 – NerdFury

-1

さて、プレースホルダを間違って参照している可能性があります。

  PlaceHolder p = new PlaceHolder(); 
      PlaceHolder1.Controls.Add(newBtn); 

しかし、多分あなたはこのかなりのようにそれを試してみてください: - - : あなたはそうのようにそれを参照している

  PlaceHolder PlaceHolder1 = new PlaceHolder(); 
      PlaceHolder1.Controls.Add(newBtn); 

チェックアウトMSDNでこのリンクを http://msdn.microsoft.com/en-us/library/kyt0fzt1.aspx