2016-06-21 14 views
2

ページが最初の例で読み込まれたとき、ボタンが意図したとおりに機能しない理由を理解できますか?たとえば、ボタン2はGetItems(int.Parse("2"), 3);を呼び出しませんが、GetItems(int.Parse("4"), 3);最初のポストバックはすべてのボタンが正しく動作するようにするButtonxはGetItems(int.Parse("x"), 3); おかげリンクボタンの動作ポストバックと非ポストバック

protected void Page_Load(object sender, EventArgs e) 
      { 
       if(!IsPostBack) 
       { 
        GetItems(1, 2); //default values (first time the page is loaded) 

       } 
       GenerateButtons(5); 
      } 

private void GenerateButtons(int c) 
     { 
      LinkButton[] x = new LinkButton[c]; 

      for(int i=0; i<c;i++) 
      { 
       x[i] = new LinkButton(); 
       x[i].Text = (i+1).ToString(); 
       Panel1.Controls.Add(x[i]); 

       x[i].OnClick += new EventHandler(Button_Click); 

      } 
     } 
protected void Button_Click(object sender, EventArgs e) 
     { 
      Button button = (Button)sender; // Which button was clicked; 

      GetItems(int.Parse(button.Text), 3); //3 is a constant; first argument is index of button extracted from its caption 

     } 

PSを呼び出します。私がボタン1を参照するとき、私はbutton[0]を念頭に置いています。 button2=button[1]など。ポストバック後button1がイベントに正しく添付されて、GetItems(1,3)がトリガーされます。ポストバックボタン1の前にGetItems(3,3)が実行されます。

+0

'Page_Init'を使うので、最初のロードで動作します –

+0

ありがとう、これはうまくいきました! – Halle

+0

私はそれをあなたがそれをマークして欲しいと回答しました。 :) –

答えて

2

それが動作するように、Page_Initを使用役立つを意図していないとして最初の負荷

protected void Page_Init(object sender, EventArgs e) 
{ 
    GenerateButtons(5); 
} 

出典:すべてのコントロールが初期化されており、あらゆる肌 設定が適用された後に発生https://msdn.microsoft.com/en-us/library/ms178472.aspx

Init。個々のコントロールのInitイベント は、ページのInitイベントの前に発生します。このイベントを使用して、または 制御プロパティを初期化する

1

あなたは動的にあなたがPage_PreInitにそうコントロールを作成するときではないPage_Load

protected void Page_PreInit(object sender, EventArgs e) 
{ 
GenerateButtons(5); 
} 

この記事では説明し

http://www.robertsindall.co.uk/blog/dynamically-adding-web-controls/

+0

おかげで売り手。ちょうどこれを試してみましたが、最初にページを読み込むときにボタンが利用できません。私は両方の場合に働くことが必要です。 – Halle

+0

'Page_Load'コードを移動しましたか? – prospector

関連する問題