2014-10-16 92 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);