|
code
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
UserControl values lost on PostBackI have a very simple user control that contains 3 drop downs. Whenever there's a postback the values of these drop downs are lost. I've tried enabling viewstate everywhere without success. Could anyone shed any light on what's going wrong? Thanks, Paul Asx: <%@ Control Language="C#" EnableViewState="true" AutoEventWireup="true" CodeFile="DayMonthYear.ascx.cs" Inherits="Test.DayMonthYear" %> <%@ Register TagPrefix="test" Namespace="Test" %> <table cellpadding="1" cellspacing="0"> <tr> <td><small>Day</small></td> <td><small>Month</small></td> <td><small>Year</small></td> </tr> <tr> <td><asp:DropDownList ID="day" EnableViewState="true" runat="server"></asp:DropDownList></td> <td><asp:DropDownList ID="month" EnableViewState="true" runat="server"></asp:DropDownList></td> <td><asp:DropDownList ID="year" EnableViewState="true" runat="server"></asp:DropDownList></td> </tr> </table> Asx.Cs: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace Test { public partial class DayMonthYear : System.Web.UI.UserControl, INamingContainer { private int _yearHigh = DateTime.Now.Year; private int _yearLow = DateTime.Now.Year - 100; protected void Page_PreRender(object sender, EventArgs e) { string[] months = new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; // add days day.Items.Add(new ListItem(string.Empty, "0")); for (int i = 1; i < 32; i++) day.Items.Add(i.ToString()); // add months month.Items.Add(new ListItem(string.Empty, "0")); for (int i = 0; i < months.Length; i++) month.Items.Add(new ListItem(months[i], (i + 1) + string.Empty)); // add years year.Items.Add(new ListItem(string.Empty, "0")); for (int i = YearLow; i <= YearHigh; i++) year.Items.Add(i.ToString()); } public int YearHigh { get { return _yearHigh; } set { _yearHigh = value; } } public int YearLow { get { return _yearLow; } set { _yearLow = value; } } } } In a User Control you will lose the PostBack value if you cause data
binding to happen before you can get the values. You may want to use code like this... if (!Page.IsPostBack) { ... bind month controls ... } In your case I see the binding is done manually on PreRender. For starters that is a curious place to put the binding. Normally you want it done in the Load event handler. Look at the page life cycle and see where it loads the ViewState and where the other events are handled in the life cycle. http://msdn2.microsoft.com/en-us/library/ms178472.aspx Brennan Stehling http://brennan.offwhite.net/blog/ paul.hes***@gmail.com wrote: Show quoteHide quote > Hi all, > > I have a very simple user control that contains 3 drop downs. Whenever > there's a postback the values of these drop downs are lost. I've tried > enabling viewstate everywhere without success. Could anyone shed any > light on what's going wrong? > > Thanks, > > Paul > > Asx: > > <%@ Control Language="C#" EnableViewState="true" AutoEventWireup="true" > CodeFile="DayMonthYear.ascx.cs" Inherits="Test.DayMonthYear" %> > <%@ Register TagPrefix="test" Namespace="Test" %> > <table cellpadding="1" cellspacing="0"> > <tr> > <td><small>Day</small></td> > <td><small>Month</small></td> > <td><small>Year</small></td> > </tr> > <tr> > <td><asp:DropDownList ID="day" EnableViewState="true" > runat="server"></asp:DropDownList></td> > <td><asp:DropDownList ID="month" EnableViewState="true" > runat="server"></asp:DropDownList></td> > <td><asp:DropDownList ID="year" EnableViewState="true" > runat="server"></asp:DropDownList></td> > </tr> > </table> > > Asx.Cs: > > using System; > using System.Data; > using System.Configuration; > using System.Collections; > using System.Web; > using System.Web.Security; > using System.Web.UI; > using System.Web.UI.WebControls; > using System.Web.UI.WebControls.WebParts; > using System.Web.UI.HtmlControls; > > namespace Test > { > public partial class DayMonthYear : System.Web.UI.UserControl, > INamingContainer > { > private int _yearHigh = DateTime.Now.Year; > private int _yearLow = DateTime.Now.Year - 100; > > protected void Page_PreRender(object sender, EventArgs e) > { > string[] months = new string[] { "January", "February", "March", > "April", "May", "June", "July", "August", "September", "October", > "November", "December" }; > > // add days > day.Items.Add(new ListItem(string.Empty, "0")); > for (int i = 1; i < 32; i++) > day.Items.Add(i.ToString()); > > // add months > month.Items.Add(new ListItem(string.Empty, "0")); > for (int i = 0; i < months.Length; i++) > month.Items.Add(new ListItem(months[i], (i + 1) + string.Empty)); > > // add years > year.Items.Add(new ListItem(string.Empty, "0")); > for (int i = YearLow; i <= YearHigh; i++) > year.Items.Add(i.ToString()); > } > > public int YearHigh > { > get { return _yearHigh; } > set { _yearHigh = value; } > } > > public int YearLow > { > get { return _yearLow; } > set { _yearLow = value; } > } > } > }
Need some advice on a GridView control.
Events for programatically added controls Menu control. Clickable area Custom Server Controls and javascript Exposing an event handler as a control property Add control to TreeView (ASP.NET 2.0) Clikable rows in Grid View Custom Collection Property Persistence Using Gridview To Export Data To Excel Error (ASP.NET 2.0) Master Page |
|||||||||||||||||||||||