c#events:第二级后没有开火
发布时间:2020-12-16 07:05:04 所属栏目:百科 来源:网络整理
导读:我搜索并尝试了很多东西,但是我无法获得以下代码.似乎当我在c#中有三个按钮时,如果我点击第一个按钮它会正确触发.但是,当我单击第二个按钮时,它无法加载第三个按钮.回到第一个.由于某些原因,事件似乎没有超过第一级.在此先感谢您的帮助. using System;using
我搜索并尝试了很多东西,但是我无法获得以下代码.似乎当我在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); } } 解决方法
ASP.NET在每个请求上重新创建ENTIRE控制树.您在.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不记得这个给你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |