I have a page that contains some dynamically created controls (TextBox and DropDownList). When a postback occurs, the TextBoxes keep their values, but the DropDownLists lose their ListItems. This is quite confusing, since the page level DropDownList also keeps its ListItems. Can anyone see what’s wrong with the code below?
Any help in solving this issue would be greatly appreciated.
<%@ Page Language='VB'%> <script runat='server'> Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) If Not Page.IsPostBack Then ddlFixed.Items.Add(New ListItem('12', '13')) ddlFixed.Items.Add(New ListItem('14', '15')) End If Dim i As Integer For i = 0 To 3 Dim ddl As New DropDownList ddl.ID = 'ddlPage' & i ddl.EnableViewState = True If Not Page.IsPostBack Then ddl.Items.Add(New ListItem('12', '13')) ddl.Items.Add(New ListItem('14', '15')) End If pnlDynamic.Controls.Add(ddl) Dim txtBx As New TextBox txtBx.ID = 'txtPage' & i If Not Page.IsPostBack Then txtBx.Text = 'Preset' End If pnlDynamic.Controls.Add(txtBx) Next End Sub </script> <html xmlns='http://www.w3.org/1999/xhtml'> <head runat='server'> <title></title> </head> <body> <form id='form1' runat='server' enableviewstate='true'> <div> <br /> <br /> <a href='Default.aspx'>Get-Request</a> <br /> <br /> <asp:Panel runat='server' ID='pnlDynamic' EnableViewState='true' /> <br /> <br /> <asp:DropDownList runat='server' ID='ddlFixed' /> <asp:Button runat='server' ID='btn' Text='Postback'/> </div> </form> </body> </html>
I have found the solution that will allow me to keep the viewstate across postbacks. It’s to call TrackViewState of the ItemCollection.
Thanks to all for your help.
This is the working solution: