2013-07-04 62 views
4

我已經搜索並嘗試了很多事情,但我無法獲得以下代碼來工作。看來,當我有三個按鈕在C#中,如果我點擊第一個它會正確觸發。但是,當我點擊第二個按鈕時,它無法加載第三個按鈕。回到第一個。由於某些原因,事件似乎沒有超過第一級。預先感謝您的幫助。c#事件:第二級後沒有觸發

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Diagnostics; 

public partial class testingSandbox : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    boot(); 
} 
public void boot() 
{ 
    firstFunc(); 
} 
public void firstFunc() 
{ 
    Debug.WriteLine("func1"); 
    Button btn1 = new Button(); 
    btn1.Text = "btn1"; 
    btn1.ID = "btn1"; 
    btn1.Click += new EventHandler(secFunc); 
    form1.Controls.Add(btn1); 
} 

public void secFunc(object sender, EventArgs e) 
{ 
    Debug.WriteLine("func2"); 
    Button btn2 = new Button(); 
    btn2.Text = "btn2"; 
    btn2.ID = "b2"; 
    btn2.Click += new EventHandler(thirdFunc); 
    form1.Controls.Add(btn2); 
    Button btn1 = (Button)this.FindControl("btn1"); 
    //btn1.Click-=new EventHandler(secFunc); 
} 

public void thirdFunc(object sender, EventArgs e) 
{ 
    Debug.WriteLine("func3"); 
    Button btn3 = new Button(); 
    btn3.Text = "btn3"; 
    btn3.ID = "b3"; 
    btn3.Click += new EventHandler(fourthFunc); 
    form1.Controls.Add(btn3); 
} 

public void fourthFunc(object sender, EventArgs e) 
{ 
    Debug.WriteLine("func4"); 
    Button btn4 = new Button(); 
    btn4.Text = "btn4"; 
    form1.Controls.Add(btn4); 
} 

}

+0

這是因爲,當你點擊btn1時,Page Reloads和boot()函數再次調用那裏。 –

+0

點擊按鈕顯示按鈕2.當我點擊按鈕2時,它回到按鈕1,而不是顯示按鈕3.如果頁面刷新,爲什麼按鈕2加載。這個問題的補救措施是什麼?謝謝。 –

+0

這是因爲btn2的Click事件沒有在'Page_Load'或'Page_Init事件中設置,因此不會觸發, –

回答

1

ASP.NET再現每個請求的整個控制樹。您在.ascx文件中編寫的內容將被轉換爲C#代碼文件(您可以在ASP.NET Temporary Files文件夾中找到它們),該文件創建控件,並且該代碼在每個請求上運行。但是,您的情況發生了這種情況:

Request 1: 
    You start out with Button1. 
Request 2: 
    You start out with Button1. A click event for it is received and processed. 
    In the event handler you add Button2. You end up with Button1 and Button2. 
Request 3: 
    You start out with Button1. A click event for Button2 is received. 
    Unfortunately there is no Button2, since the control tree got recreated. 
    The event is ignored. You end up with just Button1. 

ASP.NET webforms中的動態控件很難。您需要手動跟蹤添加的控件,並在每個後續請求的開始時重新創建它們。 ASP.NET不記得這個。