<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <div> <asp:DropDownList ID="ddlIds" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlIds_SelectedIndexChanged"> <asp:ListItem>Textbox</asp:ListItem> <asp:ListItem>Button</asp:ListItem> <asp:ListItem>CheckBox</asp:ListItem> <asp:ListItem>DropdownList</asp:ListItem> </asp:DropDownList> <asp:Panel ID="Panel1" runat="server" EnableViewState="True"></asp:Panel> <asp:HiddenField ID="hdnValue" runat="server" /> <asp:UpdatePanel runat="server" ID="updpnl_pnl_controls"> <ContentTemplate> <asp:Panel runat="server" ID="pnl_items"> <asp:TextBox runat="server" ID="txtvalue"></asp:TextBox> <asp:Button runat="server" ID="addbtn" Text="Add Item" OnClick="addbtn_OnClick" /> <asp:Button runat="server" ID="doneBtn" Text="Done" OnClick="doneBtn_OnClick"/> <asp:HiddenField ID="hdnId" runat="server"></asp:HiddenField> </asp:Panel> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger runat="server" ControlID="addbtn" /> </Triggers> </asp:UpdatePanel> </div> </form>
protected void Page_Load(object sender, EventArgs e) { pnl_items.Visible = false; if (!IsPostBack) { create_controls(); } } protected void ddlIds_SelectedIndexChanged(object sender, EventArgs e) { create_controls(); } protected void create_controls() { switch (ddlIds.SelectedItem.Text) { case "Textbox": String txt = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); string txtid = "txtBox" + txt; hdnValue.Value = hdnValue.Value + "^" + txtid; break; case "CheckBox": String chkbox = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); string chkid = "chkBox" + chkbox; hdnValue.Value = hdnValue.Value + "^" + chkid; break; case "Button": string count = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); string id = "BttnBox" + count; hdnValue.Value = hdnValue.Value + "^" + id; break; case "DropdownList": string ddcount = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); string ddid = "Dropdown" + ddcount; hdnValue.Value = hdnValue.Value + "^" + ddid; break; } if (hdnValue.Value == "") return; var val = hdnValue.Value.Split('^'); foreach (var ds in val) { if (ds.Contains("chk")) { var chkBox = new CheckBox { ID = ds, Text = "Test" }; Panel1.Controls.Add(chkBox); var lt = new Literal { Text = "<br />" }; Panel1.Controls.Add(lt); } else if (ds.Contains("txt")) { var txtBox = new TextBox { ID = ds }; Panel1.Controls.Add(txtBox); var lt = new Literal { Text = "<br />" }; Panel1.Controls.Add(lt); } else if (ds.Contains("Bttn")) { var btn = new Button { ID = ds, Text = "Test" }; Panel1.Controls.Add(btn); var lt = new Literal { Text = "<br />" }; Panel1.Controls.Add(lt); } else if (ds.Contains("Drop")) { var ddl = new DropDownList { ID = ds }; pnl_items.Visible = true; hdnId.Value = ds; Panel1.Controls.Add(ddl); var lt = new Literal { Text = "<br />" }; Panel1.Controls.Add(lt); } } } protected void addbtn_OnClick(object sender, EventArgs e) { var i = Panel1.Controls.Count; var ddl = (DropDownList)Panel1.FindControl(hdnId.Value); ddl.Items.Add(new ListItem(txtvalue.Text, txtvalue.Text)); pnl_items.Visible = true; //throw new NotImplementedException(); } protected void doneBtn_OnClick(object sender, EventArgs e) { pnl_items.Visible = false; hdnId.Value = string.Empty; }
Quote:When dynamically adding controls to an ASP.NET page in runtime the object references are lost at postback because they have no handle in the codebehind. The values entered by the user is not availible when accessing these objects after postback, and they seem empty. This article describes how to use ViewState to recreate and reinsert the postback values into the objects to access their values.
aspx
!IsPostBack
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)