这是我的尝试,由于某种原因它不起作用。我很茫然,尝试了很多东西。也许这甚至不可能?
ASPX:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
<asp:Panel ID="Panel1" runat="server">
<asp:Panel ID="Panel2" runat="server">
</asp:Panel>
</asp:Panel>
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
代码背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
Button aa = new Button();
UpdatePanel1.ContentTemplateContainer.Controls.Add(aa);
Panel2.Controls.Add(aa);
aa.Click += new System.EventHandler(this.Button1_Click);
}
protected void Button1_Click(object sender, EventArgs e)
{
Button bb = new Button();
UpdatePanel1.ContentTemplateContainer.Controls.Add(bb);
Panel2.Controls.Add(bb);
bb.Click += new System.EventHandler(this.Button2_Click);
int i = 0;
}
protected void Button2_Click(object sender, EventArgs e)
{
int i = 0;
}
添加第一个按钮没有任何问题。当我点击它时,它会对Button1_Click进行AJAX回发并添加第2个按钮。但是,当我点击第2个按钮时,它会进行常规回发,消失并且事件处理程序永远不会触发。
所有的帮助都表示赞赏,提前谢谢。
答案 0 :(得分:0)
在asp.net中无法自动维护动态生成控件的状态。
因此,您需要一些机制来维护动态生成的控件的状态。 如下所示,它对您有所帮助。
protected void Page_Load(object sender, EventArgs e)
{
Button aa = new Button();
UpdatePanel1.ContentTemplateContainer.Controls.Add(aa);
Panel2.Controls.Add(aa);
aa.Click += new System.EventHandler(this.Button1_Click);
if(Convert.ToString(ViewState["AddTwoButton"]) == "1")
CreateSecoundButton();
}
private void CreateSecoundButton()
{
Button bb = new Button();
UpdatePanel1.ContentTemplateContainer.Controls.Add(bb);
Panel2.Controls.Add(bb);
bb.Click += new System.EventHandler(this.Button2_Click);
int i = 0;
}
protected void Button1_Click(object sender, EventArgs e)
{
CreateSecoundButton();
ViewState["AddTwoButton"] = "1";
}
protected void Button2_Click(object sender, EventArgs e)
{
int i = 0;
}