UserControl values lost on PostBack

Discussion in 'ASP .Net Building Controls' started by paul.hester@gmail.com, Aug 30, 2006.

  1. Guest

    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 + 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; }
    }
    }
    }
     
    , Aug 30, 2006
    #1
    1. Advertising

  2. Riki Guest

    wrote:
    > 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 + 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; }
    > }
    > }
    > }


    If I understand your code well, you will get 12 months the first time,
    24 after the first postback etc.

    If so, in Pre_Render, use an if(!Page.IsPostBack) block for adding the
    items. In other words, don't add items on postback again.

    --

    Riki
     
    Riki, Aug 30, 2006
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Paul
    Replies:
    1
    Views:
    413
    =?Utf-8?B?UHJlbSBLdW1hcg==?=
    Aug 30, 2006
  2. Paul
    Replies:
    0
    Views:
    436
  3. Mark van Bree

    Postback problem with usercontrol in usercontrol

    Mark van Bree, May 30, 2006, in forum: ASP .Net Web Controls
    Replies:
    1
    Views:
    180
  4. Bryan

    Dynamic gridview values lost on postback

    Bryan, Aug 22, 2006, in forum: ASP .Net Web Controls
    Replies:
    1
    Views:
    1,166
    Vadivel Kumar
    Aug 23, 2006
  5. UserControl values lost on PostBack

    , Aug 30, 2006, in forum: ASP .Net Web Controls
    Replies:
    1
    Views:
    412
Loading...

Share This Page