繁体   English   中英

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

[英]How to add a control with an event handler dynamically to an update panel and have the event handler post back via 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时,它将进行常规的回发,并且消失并且事件处理程序从不触发。

感谢所有的帮助,在此先感谢。

在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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM