如何将带有事件处理程序的控件动态添加到更新面板,并让事件处理程序通过AJAX回发

时间:2014-12-24 15:32:22

标签: c# asp.net ajax

这是我的尝试,由于某种原因它不起作用。我很茫然,尝试了很多东西。也许这甚至不可能?

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个按钮时,它会进行常规回发,消失并且事件处理程序永远不会触发。

所有的帮助都表示赞赏,提前谢谢。

1 个答案:

答案 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;
    }