Failed to load viewstate. The control tree into which viewstate is being loaded
Asked Answered
S

13

20

I am receiving the following error message after an HTTP POST on an ASP.NET form hosted inside a UserControl:

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.

Here's additional info:

  • I'm running .NET 4.5 RC
  • It's an Umbraco 4.7-based website
  • On my local dev machine the form works perfectly
  • This error only occurs on the staging server which has .NET 4.5 (only), MSSQL 2012 Express, IIS 7.5, Windows 7 (I know, it's not a real server yet, one day maybe...)
  • The server is not part of a web farm (or garden, tho that should be irrevelant)
  • The user control does render controls dynamically

I have applied all the latest service packs. I have run out of ideas now! I have even restarted it and also performed a richual over the server involving a song and a special dance to no avail.

Sitar answered 3/8, 2012 at 12:44 Comment(1)
this blog post helped me with most of my viewstate problems weblogs.asp.net/infinitiesloop/archive/2006/08/03/…Pilsner
S
1

OK, so the answer is literally: "Set up a new server with all the same software as the last one and try again" and it works now.

Sitar answered 3/8, 2012 at 15:41 Comment(4)
NOTE: oh no, the issue is back after installing Windows 8 / .NET 4.5 RTM.Sitar
The cause of the problem appears to be something to do with System.Web.Optimization Bundles as it works when I turn it offSitar
OK, I can see that adding System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl to my Master page is preventing ViewState from functioning properly.Sitar
You should update the question with your findings - and accept an answer, since there's still activity here :-)Complimentary
D
27

What is important when you are adding controls dynamically is on which event you are adding them.

If you added controls on events that occur after load, they will be part of the viewstate you send to the client.

You will have to add those controls again before LoadViewState is called.

If you run into cases where the decision of which controls to add is itself stored in the ViewState or the value of a control, then remember even before the ViewState is loaded, this data is available in Request.Params

Refer the asp.net page life cycle

Page life cycle

Distributary answered 3/8, 2012 at 12:52 Comment(5)
thanks for this... however, as it works on my dev machine, it's highly unlikely to be a coding bug, otherwise everything would just constantly break when you deploy it.Sitar
If it fails for the same test case on the server, I am out of ideas. But this is usually a coding error. Never seen it to be a deployment error.Distributary
Yeah exactly! I can do something about coding bugs, but this is just weird. thanks anywaySitar
Ah yes, I see the issue, you guys are all using WebForms!Roguery
Request.Params helped me find my solution! Thanks!Critta
R
24

I just added EnableViewState="false" to my page placeholder and its gone. Hope it works for u as well.

Reminisce answered 17/4, 2013 at 6:2 Comment(1)
I am receiving this error too,im my page has gridview and with EnableViewState="False" of gridview the problem is solved.Mockheroic
E
4

This Error Mainly Occurs during View state Change: From One Template To other Template like in case of Item Template, Edit Item Template, in Controls like Form View, List Views, Detail View, Grid View in ASP .net (all frameworks);

While Changing from control states say Item Template ---> Edit Template the followings were going to alter

1) Controls will change (its ID & states)

2) Its Positions will change.

While Transformation of view if any post back occurs you will get Error as

Failed to load viewstate. The control tree into which viewstate is being loaded....

if you are using separate control for data-binding like (button,link_button_Image_button events) you will get this error reported !

To avoid this error >>> Once state changes from one template to other within method you call data source binding ( Don't call during click or any post backing events ).

Edulcorate answered 15/3, 2014 at 7:21 Comment(0)
D
2

In my case I was manipulating the .Text property of a asp:Literal on page load which was causing the issue. In all other cases this never caused me a viewstate error but in this particular case I was changing the .Text value to an html element.

The following caused the error:

<asp:Literal ID="SvgIcon" runat="server" />

SvgIcon.Text = "<svg version=\"1.1\" id=\"Layer_1\" bla bla />"

I was able to resolve the error by adding EnableViewState="false" explicitly to the control:

<asp:Literal ID="SvgIcon" runat="server" EnableViewState="false" />
Danyelledanyette answered 10/4, 2019 at 21:1 Comment(1)
Ancient answer but I have literally just had this. I have no idea why a Literals text containing markup would cause a viewstate error, but there you go.Ctenophore
S
1

OK, so the answer is literally: "Set up a new server with all the same software as the last one and try again" and it works now.

Sitar answered 3/8, 2012 at 15:41 Comment(4)
NOTE: oh no, the issue is back after installing Windows 8 / .NET 4.5 RTM.Sitar
The cause of the problem appears to be something to do with System.Web.Optimization Bundles as it works when I turn it offSitar
OK, I can see that adding System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl to my Master page is preventing ViewState from functioning properly.Sitar
You should update the question with your findings - and accept an answer, since there's still activity here :-)Complimentary
D
1

I add "name" attribute with the same value as id, then this problem is gone.

<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button   textonly" />
Denbighshire answered 17/9, 2014 at 14:34 Comment(0)
A
1

You can add new PlaceHolder per UserControls

OR

You can set enableviewstate=false on the control , if you dont need viewstate

Appreciable answered 18/1, 2016 at 12:17 Comment(0)
A
1

I had the same issue. This issue was at client end but it didn't occur in my local system. After hours of googling, i had written EnableViewState="false" to my table tag in aspx page which has all the dynamic controls and then i removed all the viewstate variables and instead i created some hidden textboxes in the aspx page and accepted DB values into them in code behind and used them throughout my code. It then solved my problem. But still, i couldn't figure out what was exactly the problem.

Approve answered 2/9, 2016 at 1:39 Comment(0)
R
0

Check if you have the binding method of the control directly in your page load event. This can cause this problem.

Regeniaregensburg answered 19/11, 2015 at 8:8 Comment(0)
U
0

In my case I had a grid view with (OnPageIndexChanging) event and when I click on a page nothing will happen until I click it twice!

I was refreshing the data source before setting new page index.


This is what I was doing wrong

grd.DataSource = data;
grd.DataBind();
grd.PageIndex = e.NewPageIndex;

This is the right way

grd.PageIndex = e.NewPageIndex;
grd.DataSource = data;
grd.DataBind();
Unstable answered 12/6, 2016 at 8:8 Comment(0)
A
0

This can happen if you override SaveViewState in your control but don't override LoadViewState.

Acrostic answered 5/10, 2016 at 12:18 Comment(0)
C
0

So I actually ended up discovering that the list of entities I was binding to was not in the same order as the controls in ViewState! I'm still working thru a cleaner solution, but my code is working with ViewStateEnabled = true by having the method which reconstructs my dynamic controls (called from Page_Load) do it differently if !IsPostBack.

Ultimately, I will probably need to fix my sorting algorithm for my nested dynamic controls, but suffice it to say: if you are using the same pattern as I am, of using a List to generate/bind to dynamic controls, and that order is fluid or changing, try comparing Request.Params to find the keys that are relevant to your control hierarchy, and see if they match the order of your List. That solved my issue. Kudos to @nunespascal!

In short, I am dynamically generating all but one tab in an AjaxToolkit tab control, and then populating that with a couple layers deep of placeholders and regular controls (textboxes, dropdownlists, etc), so that's why it's complicated to get the order of everything correct.

Critta answered 14/1, 2021 at 8:35 Comment(0)
E
0

Although this is very old question, I had visited this as I got the similar issue. But my issue was generated just because I have added a javascript code in Master page in head tag. That javascript code is reading a value of Session["KeyName"] ,

Code is like below -

$(document).ready(function () {
    var allowOpenInNewTab = false;
    allowOpenInNewTab = '<%# Convert.ToString(Session["AllowOpenInNewTab"]).ToLower() %>' == 'true';

    if (!allowOpenInNewTab && window.sessionStorage.tabId != '1') {
        alert("This page is not allowed to be open in another tab, sorry we can not load the page!!");                
    }
});

When I remove above code then everything was running smoothly but if I keep adding this part of code, it was giving this error of

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate...

Finally I found the solution like if I move my javascript code from head to just before the end of the body tag.

So solution that worked for me was moving javascript code (which is reading Session value from Server tags) to just before end of body tag.

Esposito answered 10/8, 2022 at 6:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.