C# - Can't Access Control In Form When Viewstate Disabled
Mar 19, 2011
I want to disable my viewstate in a form because its too bulky (about 1mb per page) due to retrieving some data from database and in other place on the same form I want to access a control from my master page. but when I set viewstate of Listview to false I'll get following error: Object reference not set to an instance of an object. what should I do in this situation? veiwstate is too damn bulky
and here is what I've written for accessing particular control:
Control cc = Page.Master.FindControl("mainContent").FindControl("ListView1").FindControl("itemPlaceholderContainer");
foreach (Control ListItemctrl in cc.Controls)
{
Control lblNewsId = ListItemctrl.FindControl("lblNewsID");
if (lblNewsId != null)
{
Type t = lblNewsId.GetType();
if (t.FullName == "System.Web.UI.WebControls.Label")
{
string newsID = ((Label)lblNewsId).Text;
foreach (Control childCtrl in ListItemctrl.Controls)
{
CheckBox ctrlCB = childCtrl.FindControl("chkItem") as CheckBox;
if (ctrlCB.Checked)
{
//based on DDLAction we will do the things ;)
}
if (childCtrl.FindControl("chkItem") != null)
break;
}//end foreach childCtrl
}
}//end outer if
}//end foreach listItenctrl
I have a shopping cart page (Cart.aspx) that has a button that will (sometimes) post to a third party payment gateway, if payment is necessary. The payment gateway will process the payment and then do a silent post to my website (Order.aspx) so I can update the order status.
Order.aspx always throws an invalid viewstate error, even though viewstate is disabled on the page.
What's happening is that Cart.aspx (which has viewstate enabled) posts to the payment gateway, and the gateway will post it back as part of the silent post. Even though Order.aspx has viewstate disabled and validation disabled, it still tries to validate the __viewstate field it's being given.
I know setting EnableViewState=false will disable the rendering of the __viewstate field, but if another page provides the field, shouldn't it still skip validation? I tried calling ViewState.Clear() on the Page_Init event of Order.aspx, but ViewState is apparently empty. how to get around this? I don't want to disable ViewState on Cart.aspx (in some cases it may be necessary), but I can't figure out how to clear it on Order.aspx.
I have a repeater which viewstate is disabled, inside i have a textbox and a submit button. Before disabling viewstate i could get the text from the textbox in the submit buttons onClick event. But now it doesnt seem to work.
I dont want to enable viewstate on the repeater as my site get really heavy then. How can I get the value form the textbox when I click the submit button? using .net 3.5
I have a ASP.NET 4.0 webforms site where I have the MasterPage so it is set to ViewStateMode="Disabled" along with the content placeholders being set similarly.
When I'd view my page I'd still see a ViewState field rendered, I then tried adding the ViewStateMode="Disabled" to the page level also but that didn't change anything.
I tried this in many scenarios and everytime the ViewState is disabled page-wide, NoBot raises an internal NullReferenceException and always returns InvalidBadSession. I suspect that you are referencing the ViewState and it returns a null value which is then used. It's probably a good idea to think about a way that avoids using ViewState.
I am having an issue with dropdown list when viewstate is disabled. The selectedindexchanged event fires even for the other events on the page.
I am pasting the code bello. To reproduce the issues I am mentioning change the selected value of the dropdownlist and then click any button the selected indexchanged event fires even thought we didnot change the value.
I have a CheckboxList that seems to load and do everything right, except for when I do a postback, it will not have the Item.Selected property set. I have viewstate disabled for the entire page.
I load it like so(inside Page_Load on every load): foreach (DataRow service in d.Tables[0].Rows) { [code]...
and MyLabel never has any text added to it. I can verify with the debugger that it does reach the _Click's foreach loop, but no item is ever selected. What could be the cause of this?
After witnessing some strange behvior I'm confused about ViewState again :/
My understanding was a textbox needed to have "EnableViewState" set to true otherwise when the you postback the fields contents would disappear.
That's not happening, I created a textbox and button and a label.
The button was set to copy contents of text box into the label when I pressed it.
I did and the text was populated into the label and remained in the textbox?
This was inside an UpdatePanel and the page itself has a MasterPage, so that might have something to do with it, but I have about 50 textboxes on this page all with viewstate=true on, so I would really like to know what controls need to have enableViewstate=true in order o function properly.
If I disable the ViewState on a ListView, the events raised by it are no longer ired. OnPagePropertiesChanging is the ListView event I've always used in combination with the DataPager to update the ListView to the correct page once a DataPager item is clicked, but since its not being fired, I'm wondering if there are any other options. My ListView is currently in an UpdatePanel, and I'm caching the results that the ListView is being bound to. I could rebind the cached results on the PageLoad, but I can't think of a good way to determine if the PageLoad is being accessed because the DataPager was clicked, or for some other reason, so this doesn't seem like a good idea
I am using a GridView with an ObjectDataSource bound to a DataTable. I am using the GridView for displaying a report, NO editing is being done, just read only, however, I am sorting and paging. I need to turn off ViewState for the GridView to improve performance. After turning off the ViewState I start getting the error messages for both paging and sorting:The GridView 'gridView' fired event Sorting which wasn't handled.This is fine I just need to know how to implement the Sorting and Paging events correctly to leveage the ObjectDataSource. I would preffer not to remove the ObjectDataSource from use, especially if there is a way I can manually wire up the datasource correctly to continue to use the GridView as I had been when ViewState was on.Any help on getting the datasource wired up or a solution for handling the events in the context of the datasource would be great.
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:
My web app (asp VB 2005) uses Windows authentication. If the user isn't part of a specific AD security group they don't get to edit the data; instead I redirect the user to a read-only page.The program works fine in the IDE.I published the web app to my laptop and Disabled anonymous access. When I ran the program I got redirected to the read-only page. I added a write event to the application event log to see what was going on, and found that the WindowsPrincipal.Identity.Name contained my laptop's ID, not my user name.I reassert: anonymous access is disabled in IIS and the web.config file has Windows Authentication.
If I am going to access another page from previous page using response.redirect or server.transfer, What can I do so that the previous web page control can be accessed by the another page? Is it possible??
I do some stuff with dynamic DropDownLists. A choice at one level makes the next level appear and so on.
When I open up an old report for editing, the first level is not editable so I set that DropDownList to Enabled=false (still dynamically in code).
My problem is that when I press save (a LinkButton) I first come to my OnInit as usual and check the Page.Request.Form for my DropDownLists, but then the first list is not represented.
But if I change one of the lists when editing, a postback is made, then there is no problem at all with the Page.Request.Form, the first list is there all the time.
Is there some fundamental difference with causing a PostBack from a LinkButton vs a Dynamically Added DropDownList?
If a disabled drop-down list is dynamically rendered to the page, it is still possible to use Firebug, or another tool, to tamper with the submitted value, and to remove the "disabled" HTML attribute. This code:
[code]....
The problem occurs when I use Firebug to remove the "disabled" attribute, and to change the selected option.On submission of the form, and re-creation of the field, the newly generated control has the correct value by the end of OnLoad, but by OnPreRender, it has assumed the identity of the submitted control and has been given the submitted form value.
.NET seems to have no way of detecting the fact that the field was originally created in a disabled state and that the submitted value was faked. This is understandable, as there could be legitimate, client-side functionality that would allow the disabled attribute to be removed.
Is there some way, other than a brute force approach, of detecting that this field's value should not have been changed?
I see the brute force approach as being something crap, like saving the correct value somewhere while still in OnLoad, and restoring the value in the OnPreRender. As some fields have dependencies on others, that would be unacceptable to me.
I have a class UserControlBase that inherits System.Web.UI.UserControl and my user controls inherit UserControlBase class. UserControlBase has some common functions that are used in all user controls.
I want to put error display funtion to UserControlBase as well so that I may not have to declare and manage it in all user controls. Error will be displayed in some label in usercontrol. Issue is how to access label which is in usercontrol in UserControlBase in function ?
i have a web for and want to 'get' it to another page.. is there anyway to submit it without posting the viewstate and other bits i dont want? or should i be catching the submit button click and redirecting with a querystring i build myself
I know this question has been asked million times but I think my situation is different here.I am using .NET Framework 3.5 SP1, there is no form action on the page and it's not happening when I try to submit the form quickly. I am not on a web farm either.I have a page with two GridViews. One Gridview acts as a master gridview and second as detail gridview. First Gridview has autogenerate select button and clicking select would bring related records in detail gridview at the bottom. I have a refresh Link button at the top. Everything works fine. I click refresh button and it works fine too.Ok when problem start happening when I leave the page idle for like 10 minutes or so and then I click Refresh button only then I get this "Validation of Viewstate MAC failed" error.
I have an ajax form that has a simple click event. Inside the click event, at the end of the method, I have a Response.Redirect back to the same page. For the purpose of this thread, I will leave out the reasoning of this (it is just something that I had to do). Once the ajax call is complete and the redirect takes place, all of my default control viewstates get wiped out. The thing that doesn't make sense, is that if I define my own ViewState right before the Response.Redirect, these ViewStates also get wipedout. So, my question is, do ViewStates only hold their values after one postback/refresh? And, is there a way to use ViewState with the method described above? I am being forced to use the querystring to pass parameters.
In building custom controls, I've seen two patterns for using the viewstate. One is to use properties to disguise the viewstate access as persistent data.
public bool AllowStuff { get { return (ViewState[constKeyAllowStuff] != null) ? (bool)ViewState[constKeyAllowStuff] : false; } set { ViewState[constKeyAllowStuff] = value; } }
The other is to use private member fields and to override the Load/SaveViewState methods on the control and handle it all explicitly:
(I cut out a lot of safety checking for clarity, so just ignore that.) Is there are particular advantage to one method over the other? I can't see how they'd differ much performance wise. Version 1 is lazy, so I guess you save a bit if you don't need that particular value during a pass. Version 1 is also more abstract, hides the details better. Version 2 is clearer about when the data is actually valid and ok to read or modify (between the load and save) because it more clearly works within the ASP.NET lifecycle. Version 2 does tend to require more boilerplate code though (a property, a backing private field, and viewstate handling in two places) as opposed to Version 1 which combines all that into one place.
To this Redirect.aspx page, I'm directed from some external page. In the request context, I have APP_ID key, which is passed from this external page. Next, I want to pass this APP_ID value using POST to some other page, which is defined in the configuration. Unfortunately, I'm getting such error while redirecting:
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
I don't want to disable view state validation (<pages enableViewStateMac="false">) because this is not the "solution" I want to apply.
Besides I don't understand why I'm getting such an error. Can someone get me through this ? Is there any other way to automatically submit a form on Page_Load event ?
Validation of viewstate MAC failed. If this application is hosted by a Web Form or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. How to solve this problem in web.config ....