State Management :: Dynamically Added Controls And 'Failed To Load Viewstate' Error
May 23, 2010
I am writing a search results page for an airline booking system. I have Next/Previous buttons to view flights for the next or previous days. The way i have done my results grid is that i use an HtmlTable and dynamically add rows, cells and controls into the cells. This gives ultimate flexibility given that we can add any control type we want and have it function as it does everywhere else in the system. As you should be aware - i must recreate these controls each time the page is reloaded (in the page_init event) since asp does not handle this automatically.
When they go next/previous it refreshes the flight data and re-populates the grids. If they select a flight in the return grid (by checking the RadioButton), and go next on the FIRST leg grid, the selection of the return leg stays the same after the postback
- which is great. But the problem is, if the flight they selected on the return leg is no longer available it will not create the control and i get the following error;
"Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: 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."
Is there any way to tell asp.net that if you do not find the control anymore, simply ignore it rather than throwing the error? The nature of this design is that there potentioally WILL be a different layout after the page is posted back.
Now here is the weird thing. First i am running it locally on the built in vs2008 web server.I load my control in fine, do a postback from a linkbutton, locally on my machine it all works fine, no issue.However when it goes onto my host, it falls over with the message:
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.Now i also load controls dynamically and use postbacks and things in the admin area of the site...and that works fine, however my front end just keeps failing? See the code behing below:
I deploy a simple web app,that works fine on my local system, on a remote server. The webform consist of a Menu control and a Listview control. If I browse the page and then leave it for like 20 minutes untouched and then try to select an entry from the menu I am getting the following error -
Webpage error details User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTB5.6) Timestamp: Wed, 28 Apr 2010 07:39:24 UTC
Message: Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500 Line: 4723 Char: 21 Code: 0 URI: http://www.shoeslocation.com/ScriptResource.axd?d=w3IpLZb6A3e5QHkk7kOTg4vdE8qw_8oIJ-6Kv5NpYYlCqyodfByoMbMvCI7RsUpH3U_p3tMqnuLd_nCq_qPaX4weg2w6s1FlfA_eQbVY-nU1&t=55414254
Before that I used to get the following error -
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.So I added the following to the Pages tag in the web.config validateRequest="false" enableEventValidation="false" viewStateEncryptionMode ="Never"
I have a page that loads a usercontrol dynamically. Depended on the user's actions, this control may be unloaded in Page_PreRender and a different control may be loaded instead. I am attempting to use the solution outlined by Mark DotNet Evans in this post: http://forums.asp.net/p/1491790/3814320.aspx
This all works great, except if the user clicks the refresh button in the browser just after the change of usercontrol. Then, I get an 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. ...
I assume the error is caused by the browser re-posting the request with the old viewstate that matched the control tree when the page was loaded, but no longer does. How can I prevent getting an error when the user reloads the page?
In our control environment, we've started, somewhat intermittently, getting:
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
on our website.It also suggests:
Source Error: The source code that generated this unhandled exception can only be shown when compiled in debug mode. To enable this, please follow one of the below steps, then request the URL:
1. Add a "Debug=true" directive at the top of the file that generated the error. Example:
<%@ Page Language="C#" Debug="true" %> or:
2) Add the following section to the configuration file of your application:
Note that this second technique will cause all files within a given application to be compiled in debug mode. The first technique will cause only that particular file to be compiled in debug mode.
Important: Running applications in debug mode does incur a memory/performance overhead. You should make sure that an application has debugging disabled before deploying into production scenario.
We already have compilation debug as true. We have upgraded our website to ASP.NET 4.0, although our middle tier components are still at 3.5. As we do in out production machine configs (which are using ASP.NET 3.5) we have
This control environment is not in a server farm. Why is it suggesting that I turn on debug, when it's already on. Why isn't it showing me my source code?
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
my website was designed using dotnet 2003 worked under dotnet framework 1.0 the website was working fine then i had to upgrade the server to windows 2008 iis 7.0 so i configured the website to work under dotnet frame work 2.0 and the problem started to show up
I am having this problem with, it seems, Viewstate. This issue only occurs on certain machines, if I browse the website myself it works fine but if another user browses the pages they will lock up and timeout with the error "Viewstate verification failed. Reason: Viewstate was invalid." appering in the event log. Full error is as follows:
I read this article first to try to solve this issue, but I am already loading the controls in the Init phase of the page, yet viewstate is not persisting. Any ideas as to why? (Of note is that this is for a custom module in DNN and I do have some AJAX update panels on the page, though this section is not within an update panel, for what it's worth.)
As an overview of what I've got:
1. LoadControl.ascx - based on reading query string parameters, determines whether to load the master or the detail .ascx. 2. Master.ascx 3. Detail.ascx
In my master control I dynamically load either a master or detail sub-control in the page_Init. The detail page has a treeview control and then uses a multi-view control to display the panel associated with the depth of the node selected on the tree. On the panel being displayed I have a cascading ddl within a detailsview control which initiates a postback to select the child ddl based on the parent ddl selection. However, when the page refreshes after the postback, both ddls have resorted to their default selection.
What is interesting however, and I just realized this as I am typing, is that the Treeview is populated when the page comes back from the postback, so that is only possible if viewstate is being persisted right? (See the page_load code and you'll see that Call PopulateRootLevel(intTreeUserID) which populates the treeview, is not called on postbacks....hmmm.
Any ideas as to why the treeview maintains viewstate but not my ddls???? But though the tree is populated, I do have to explicitly select the node again and set the panel that the detailsview control is on to visible again too....
I've run into this bizarre situation wherein I get the below error if I set page size other than 5 in the page using this control.
"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."
This GridView is a hierarchial type. I add a new GridView below each row in the webcontrol overriding OnRowDataBound.
I have gridview control. visit [URL] but when i change page index of this i get error the following 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.
Using ASP.NET with framework 4.0.30319, changes to the ControlStyle of a ButtonField in a GridView are not saved in Viewstate. Examining the source code suggests that this is because DataControlField.LoadViewstate does not load viewstate for the ControlStyle.
It's possible to work around this by overriding SaveViewState in the closest container and saving the state there.
I haveMaster Page -> ASPX page -> User ControlUser control page is contains all dynamic bind controls (e.g Repeater) depended on ASPX Page (Only one parameter say ItemNo)The problem is, if I bound user control on page load event with passing respective parameters then it's create to much view state (I checked source file and it's almost 1.5 MB)In other way if I put one textbox, and a command button and I pass required parameter on button click and load the control then page size is ok (I checked and it's < 500KB)
I have a gridview that on it's RowDataBound event I dynamically add Image Controls to some columns.
The problem is that I lose these images on the next PostBack.
OBS: The GridView's EnableViewState propertie is already set to true
I know about the page lifecycle, but how can I persist these images if I have to add them on the RowDataBound event?
In addittion, if I add a static TemplateColumn with an Image Control and I set it's ImageUrl propertie inside the RowDataBound event it will obviously persist between postbacks. The problem is that I don't know how many columns with images I'll have, it's defined on the datasource.
How to maintain view state for the dynamically added html controls to a table using javascript(Below is the javascript which I am using to add HTML Controls Dynamically"). Because during the postbacks if I found any error while validating the data present in the dynamically added html controls, the controls are loosing their state and again I need to start adding rows and add data.
I have ONE <asp:Button ID="btnAddUC" runat="server" ......./> and ONE <asp:Table ID="tblUC" runat="server"...> on my page. User clicks on btnAddUC, user control is added to the page [user can add 'n' user controls to the page]. here I have no problem, adding user controls to the page on user clicks.
My user control has ONE <asp:DropDownList ID="ddlItems" runat="server" ......./> and ONE <asp:CheckBoxList ID="chkItems" runat="server"..../>. I am exposing "ddlItems" by public method, "chkItems" is not exposed. "chkItems" is binded on SelectedIndexChanged event of "ddlItems".
Execution scenario:
User adds user control to the page, select item from the "ddlItems" ( Note: "ddlItems" is exposed by public property ) , "chkItems" is populated ( using ddlItems.SelectedItem.Value ) . User checks some checkboxes in "chkItems" and then decide to add one more user control. When the second user control is added to the page, checkboxes in the first usercontrol lose their state and apeears unchecked (NOTE: user checked some checkboxes and then added another user control).
I want to put checked beckboxes index in session ( Before another control is added, which event I should use, because at LOAD event there is nothing).
I was able to restict SelectedIndexChanged event to only that user control whcih generated it (checking _EVENTTARGET)
I have just downloaded Obout.com suite controls for ASP.NET 3.5 and 4.0. I made this because I wanted a DropDown with images near items.It is working well, but, still in the examples, when you set AutoPostBack property to true, and you select an item from the ComboBox controls you get the following 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."
I want to know that when we create custom controls, then is there State Management through ViewState done automatically or we have to handle it explicitely ?Since i have created Custom Controls that is behaving as if it is not maintaining its state on PostBack.
I have been getting this error a lot lately with some of my users, and I had a couple of concerns with view state and I have read so many articles but I am still lost..
1. I use masterpage on all the pages and I need viewstate for some of the pages but..
There is a page where a user will fill out the information and then submit this data to a cgi server, and it is where I get most of the Client Disconnected errors, what would happen if I disable viewstate when they click on that button?
Now when a user browses from one page to another, does the view state from the previous page get deleted? If not how would I delete it?
Does the master page have its own viewstate? Would I be able to make sure none of items on my master page are using the viewstate?
Yes, it's the infamous viewstate again! Now I am aware that problems can ocurr if you load controls in the wrong order or if the viewstate IDs are incorrect after postbacks etc etc. But my issue is that I am not really creating any controls dynamically - I only have one user control on the page.
More importantly, the issue seems to be occuring with just one user. What could be the problem? Corrupt browser cache?
ok - so I've narrowed it down a bit more. When I select an item from a drop down list control (which is a UserControl) - and then attempt to rebind my grid using the selected value, the error occurs.
The selectedvalue on postback seems to be zero every time (because the control is not in the viewstate somehow?!). The UserControl (containing the dropdownlist) is added at design-time.
Currently I am creating some dynamic controls on my page these can be hundreds of controls.Some of these will be available depending upon the input of the page so you can say the visibility will be different. This page in fact represents the dozens of pages.I want to create these pages from viewstate, e.g I have created 5 textboxes on page_Init() and then want to store these in Viewsate and next time if needed then load from the view state.In the other words can I create the and store the whole control object with all of the properties in viewstate, if so then how I will be able to accomplish this.
I want viewstate to stop showing its magic at particular event in my page. Problem details is :I creating dynamic panel on my page_init event ( added to parent panel on aspx ) and creating dynamic dropdown control on page load events with values 1,2,3,4,5 in which 1 is default and added this dropdown to panel i created in init event. As my controls are dynamic , I am creating these controls on postback also. I had enable viewstate property true for all controls as I want them to persist user data on postbacks. i.e. if after page gets loaded drpdown default is 1 and uses select 5 and click on any button on my form ( Postback ) dropdown should show 5 and this is working for me. But problem in one requirement is one particular after button click event on my page say ( Reset) i want my dropdown value should not persist user selection and should display default value 1. I can t reset my controls on this button click event. All I want is as these are my dynamic controls , they are created on every page_load and fresh data is loaded, on particular REset button I want my Viewstate should not map to my dropdown. and controls should show whatever default selection is.
There is a lot time involved in determining what cells get the linkbutton and I want to avoid going through that process on a postback when a user clicks one of the linkbuttons.How can I maintain these controls in the gridview after a user clicks a linkbutton and a postback is done?Right now the application has to go through the process all over again.