簡體   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