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.
You can add new PlaceHolder per UserControls
OR
You can set
enableviewstate=false
on the control , if you dont need viewstateIn 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.
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 theViewState
is loaded, this data is available inRequest.Params
Refer the asp.net page life cycle
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.
This can happen if you override
SaveViewState
in your control but don't overrideLoadViewState
.Check if you have the binding method of the control directly in your page load event. This can cause this problem.