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

Discussion in 'ASP .Net Building Controls' started by Josema, May 9, 2005.

  1. Josema

    Josema Guest

    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.

    --
    Thanks
    Regards.
    Josema
    --
    Thanks
    Regards.
    Josema
    Josema, May 9, 2005
    #1
    1. Advertising

  2. Josema

    sam Guest

    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.
    sam, May 18, 2005
    #2
    1. Advertising

  3. Josema

    sam Guest

    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
    sam, May 22, 2005
    #3
    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. Stub

    B tree, B+ tree and B* tree

    Stub, Nov 12, 2003, in forum: C Programming
    Replies:
    3
    Views:
    10,078
  2. sck10
    Replies:
    6
    Views:
    883
    sck10
    Sep 1, 2006
  3. sharan
    Replies:
    4
    Views:
    670
    CBFalconer
    Oct 30, 2007
  4. Josema
    Replies:
    0
    Views:
    191
    Josema
    May 9, 2005
  5. Albert-Jan Roskam
    Replies:
    2
    Views:
    69
    Chris Angelico
    Nov 25, 2013
Loading...

Share This Page