Anubis2005
asked on
URGENT: DropDownList in custom server control not holding value on postback
Hello All,
I have a problem where a DropDownList contained within one of my custom server controls is not holding its value on postback. I've tried several different things but can't seem to find why it's dropping its value. ViewState is enabled on the page and I've not specifically disabled ViewState on any of the controls.
Below is the code specific to the dropdownlist in the custom control.
Desperate to solve this quickly...
Anubis
I have a problem where a DropDownList contained within one of my custom server controls is not holding its value on postback. I've tried several different things but can't seem to find why it's dropping its value. ViewState is enabled on the page and I've not specifically disabled ViewState on any of the controls.
Below is the code specific to the dropdownlist in the custom control.
Desperate to solve this quickly...
Anubis
public class DatePicker : WebControl
{
// CREATE CONTROLS
public DropDownList Month = new DropDownList();
// SET PROPERTIES
protected string _MonthDefault = "";
protected string _MonthCssClass = "";
// RENDER CLIENT CONTROLS
protected override void CreateChildControls()
{
// CREATE MONTH CONTROL
Month.ID = this.ID + "Month";
Month.CssClass = _MonthCssClass;
string[] _MonthOptions = new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
string[] _MonthOptionsValues = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };
for (int i = 0; i < _MonthOptions.Length; i++)
{
ListItem _MonthFieldItem = new ListItem();
_MonthFieldItem.Value = _MonthOptionsValues[i];
_MonthFieldItem.Text = _MonthOptions[i];
Month.Items.Add(_MonthFieldItem);
}
// CHECK FOR DEFAULT SELECTION
if (!String.IsNullOrEmpty(_MonthDefault) && !Page.IsPostBack)
{
if (_MonthDefault == "NOW")
{
foreach (ListItem i in Month.Items)
{
if (i.Value == _MonthOptionsValues[(DateTime.Now.Month - 1)])
{
i.Selected = true;
break;
}
}
}
else
{
foreach (ListItem i in Month.Items)
{
if (i.Value == _MonthDefault)
{
i.Selected = true;
break;
}
}
}
}
// APPEND CONTROL
this.Controls.Add(Month);
} // END IF
} // END VOID
} // END CLASS
ASKER
Hello ragi0017,
Thanks for the comment. I had thought that solved my problem but once I had read through the document, I think I'm still missing something.
In my asp.net page, I'm calling the 'DatePicker' class directly in the ASP.NET code (not the code behind).
As:
<as:DatePicker runat="server" ID="MonthSelection" />
As far as I can tell, shouldn't calling the control this way place it's contents in the Init of the page? If so, then there must still be something missing?
I have seen (using the disassembler on the .net assembleys) that most of the controls are generated using the Render method, could it be a problem that I'm using CreateChildControls and not the Render method? If so, how could I convert the above code to function in Render?
Thanks
Anubis.
Thanks for the comment. I had thought that solved my problem but once I had read through the document, I think I'm still missing something.
In my asp.net page, I'm calling the 'DatePicker' class directly in the ASP.NET code (not the code behind).
As:
<as:DatePicker runat="server" ID="MonthSelection" />
As far as I can tell, shouldn't calling the control this way place it's contents in the Init of the page? If so, then there must still be something missing?
I have seen (using the disassembler on the .net assembleys) that most of the controls are generated using the Render method, could it be a problem that I'm using CreateChildControls and not the Render method? If so, how could I convert the above code to function in Render?
Thanks
Anubis.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
if yes then you need to handle the custom controls in a little different way
http://www.4guysfromrolla.com/articles/092904-1.aspx