2014-10-16 27 views
0

我有一個動態添加的下拉回發在updatepanel中,它總是會導致回發。ASP.NET在updatepanel中動態添加下拉回發

我已經將ddl構建移至page_init,也嘗試給ddl一個id。我已經嘗試使更新面板有條件並在ddl選擇被觸發後發佈更新。

任何想法?

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

代碼背後

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(); 
    } 
} 

回答

0

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

你的下拉菜單添加到控制面板之後(行後Panel1.Controls.Add(ddl);