简体   繁体   中英

ASP.NET dynamically added dropdown postback in updatepanel

I have a dynamically added dropdown postback in an updatepanel and it always causes a postback.

I have moved the ddl build to page_init also tried giving ddl an id. I have tried making the update panel conditional and issuing an update after ddl selection is triggered.

Any ideas?

    <body>
        <form id="form1" runat="server">
            <asp:Panel ID="Panel1" runat="server" Height="309px">
            <div id="ctldiv">
                <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">           </asp:ToolkitScriptManager>
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                        <asp:Label ID="Label1" runat="server" Text="Panel Created"></asp:Label><br />
                        <asp:Button ID="Button1" runat="server" Text="Refresh Panel 1"         OnClick="Button1_Click" />
</ContentTemplate>
                </asp:UpdatePanel>
            </div>
        </asp:Panel>
    </form>
    </body>

code behind

    public partial class Default4 : System.Web.UI.Page
    {
    protected void Page_Init(object sender, EventArgs e)
    {
        buildddl();
    }
    protected void message(string message)
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "", "dspmsg('" + message + "');",     true);
    }
    private void buildddl()
    {
        DataTable dt = new DataTable();
        DataRow dr = null;
        dt.Columns.Add(new DataColumn("col1", typeof(string)));
        dt.Columns.Add(new DataColumn("col2", typeof(string)));
        dr = dt.NewRow();
        dr["col1"] = "1";
        dr["col2"] = "1";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["col1"] = "2";
        dr["col2"] = "2";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["col1"] = "3";
        dr["col2"] = "3";
        dt.Rows.Add(dr);
        DropDownList ddl = new DropDownList();
        ddl.DataTextField = "col1";
        ddl.DataValueField = "col2";
        ddl.DataSource = dt;
        ddl.DataBind();
        ddl.AutoPostBack = true;
        ddl.ID = "ddl1";

        ddl.SelectedIndexChanged += new EventHandler(ddl_select);
        Panel1.Controls.Add(ddl);
    }

    protected void ddl_select(Object sender, EventArgs e)
    {
        DropDownList ComboBox = (DropDownList)sender;
        Label1.Text = "selected :" + ComboBox.SelectedItem;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "Panel refreshed at " +
        DateTime.Now.ToString();
    }
}

Put

UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger() { ControlID = "ddl1" });

after you add the dropdown to the control panel (after the line Panel1.Controls.Add(ddl); )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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