2016-06-21 18 views
2

你能幫我理解爲什麼,當下面的例子第一次加載頁面時,按鈕不能按預期工作,例如,按鈕2不會調用GetItems(int.Parse("2"), 3);,而是調用GetItems(int.Parse("4"), 3);首先回發所有按鈕正常工作,例如Buttonx呼籲GetItems(int.Parse("x"), 3); 感謝linkbuttons行爲回發與不回發

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