[英]UpdatePanel not working in ascx control if is added on Page_Load
[英]Is it possible to add an EventHandler to a control added at runtime after Page_Load?
根据下面的代码,它似乎不起作用。 我可以在Page_Load之后向页面动态添加控件,但是无法将EventHandler连接到该控件。
这是我的代码背后:
public partial class AddingControlsToPanelAtRuntime : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DrawPage();
}
private void DrawPage()
{
Label label;
label = new Label();
label.ID = "Label1";
label.Text = "Label 1";
Panel1.Controls.Add(label);
Panel1.Controls.Add(new LiteralControl("<br />"));
label = new Label();
label.ID = "Label2";
label.Text = "Label 2";
Panel1.Controls.Add(label);
Panel1.Controls.Add(new LiteralControl("<br />"));
LinkButton linkButton1 = new LinkButton();
linkButton1.ID = "linkButton1";
linkButton1.Text = "linkButton 1";
linkButton1.Click += new EventHandler(LinkButton_Click);
Panel1.Controls.Add(linkButton1);
Panel1.Controls.Add(new LiteralControl("<br />"));
LinkButton linkButton2 = new LinkButton();
linkButton2.ID = "linkButton2";
linkButton2.Text = "linkButton 2";
linkButton2.Click += new EventHandler(LinkButton_Click);
Panel1.Controls.Add(linkButton2);
}
protected void LinkButton_Click(object sender, EventArgs e)
{
Panel1.Controls.Add(new LiteralControl("<p>"));
LinkButton linkButton4 = new LinkButton();
linkButton4.ID = "linkButton4";
linkButton4.Text = "linkButton 4";
linkButton4.Click += new EventHandler(LinkButton_Click);
Panel1.Controls.Add(linkButton4);
}
}
因此,在从Page_Load调用的DrawPage()中,所有控件都可以很好地添加到Panel中,并且EventHandlers可以完美地连接起来。
当我单击LinkButton1或LinkButton2时,它们会正确调用LinkButton_Click()。 在LinkButton_Click()中,我在运行时添加了另一个控件,并连接了EventHandler,但是当我单击该链接按钮时,它仅回发到Page_Load,并且不调用LinkButton_Click()。
因此,基于ASP.NET管道,我在这里试图做的事是不可能的吗?
您想要做的是可能的。 真正了解页面生命周期将有所帮助。 http://msdn.microsoft.com/en-us/library/ms178472.aspx
这是您页面上当前正在发生的事情。
Page_Load
Create Controls (label 1/2, linkbutton 1/2)
-> Browser renders label 1/2, linkbutton 1/2
-> User Clicks link button 1 or 2
Page_Load
Create Controls (label 1/2, linkbutton 1/2)
Control events fire
LinkButton_Click fires
Adds another linkbutton (linkbutton 4)
-> Browser renders label 1/2, linkbutton 1/2 AND 4
-> User Clicks link button 4
Page_Load
Create Controls (label 1/2, linkbutton 1/2)
Control events fire
(There is no link button 4 so nothing happens)
-> Browser renders label 1/2, linkbutton 1/2 (4 is missing)
您缺少的核心部分是重新添加动态创建的控件。 每个控件都需要在每个回发时重新读取(并且如果您关心viewstate,则以相同的顺序)。 您可以通过viewstate或任何其他回发持久性机制来跟踪需要读取的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.