2013-07-04 61 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不记得这个。