Failed to load viewstate. The control tree into which viewstate...

J

Josema

Hi to all,

I have a webform.aspx and inside i have a dropdown list with autopostback
and a place holder...

Depending of the selected index that the user selects in the dropdownlist i
load a usercontrol into the place holder...

i dont know why im getting this error:

Failed to load viewstate. The control tree into which viewstate is being
loaded must match the control tree that was used to save viewstate during the
previous request. For example, when adding controls dynamically, the controls
added during a post-back must match the type and position of the controls
added during the initial request.

and this is that i have:

if(!Page.IsPostBack)
{
//fill the dropdownlist with the options
}
else
{
switch(this.OpcionInicialDDL1.SelectedValue)
{
case "0": //Option 0 is "choose option" dont fill the placeholder
break;
case "1": //Option 1 is "Phone", add to place holder the phone
usercontrol

PhoneControl=(UserControls.Phone)LoadControl("UserControls/Phone.ascx");
//load the control phone
this.OpcionPH.Controls.Add(PhoneControl);//add into the placeholder
controls the control phone
break;
case "2": //Option 2 is "Internet", add to place holder the Internet
usercontrol

InternetControl=(UserControls.Internet)LoadControl("UserControls/Internet.ascx"); //load the control internet
this.OpcionPH.Controls.Add(InternetControl); //add into the placeholder
control the internet
break;
case "3": //Option 3 is "Phone + Internet", add to place holderthe Phone
and Internet usercontrol
PhoneControl=(UserControls.Phone)LoadControl("UserControls/Phone.ascx");
//load the control phone

InternetControl=(UserControls.Internet)LoadControl("UserControls/Internet.ascx"); //load control internet
this.OpcionPH.Controls.Add(PhoneControl); //add into the place holder the
phone control
this.OpcionPH.Controls.Add(InternetControl); //add into the place holder
the internet control
break;
}
}

Any help would be appreciated.
 
S

sam

Hi there,

You can't do that. Specifically, you can't change the controls around
like that. You have to have the same controls added to the placeholder
each time. I can explain why if you want. Bascially it has to do with
how the framework restores Viewstate.

*Unless* you disable Viewstate. After you load each control and right
before you Add() it try doing a EnableViewState=false. That should fix
it but then you can't use Viewstate on those controls.
 
S

sam

What you can do is have 5 (or however many user controls you can have
maximum) placeholders always on the page (you can hardcode these in the
aspx page if you want) and set the .Visible property of all these to
false. Then load *all* the user controls into the placeholders on page
load. Then, in the drop down list event handler (or later in the page
load, since you seem to be doing that) set the .Visible property of the
correct placeholder to true. That will do the trick. EnableViewstate
on everything. Forget what I said before about making it false :).

By the way, you can indeed override OnLoadViewState but that won't stop
child controls from repopulating Viewstate. The only way to stop it is
to set .EnableViewState = false on a parent control, as I mentioned
before.

I see you are using dropdownlists so you need Viewstate so that the
auto change event will be fired, as you have doubtless figured out by
now. So my previous answer will be the only one that can work. If you
need more help or I said something wrong just reply.

The reason you cant change the control tree is because the framework
uses the indexes into the control tree rather than the client ids to
figure out which control needs which Viewstate. So it gets seriously
confused when the indexes say a control is supposed to be there and it
isn't because you've changed it. So it throws that error.

-Sam Robertson
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top