Lifecycle To Access Viewstate?
Nov 8, 2010
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:
protected override object SaveViewState()
{
object[] myViewState = new object[2];
myViewState[0] = base.SaveViewState();
myViewState[1] = _allowStuff;
return myViewState;
}
protected override void LoadViewState(object savedState)
{
object[] stateArray = (object[])savedState;
base.LoadViewState(stateArray[0]);
_allowStuff = (bool)stateArray[1];
}
(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.
View 2 Replies
Similar Messages:
Feb 8, 2011
When exactly is the view state accessible from the .Viewstate property of a control? From my observations, the closest event is on the Page.PreLoad event (at Page.InitComplete, Viewstate is still unavailable).
However, for controls that implement the IPostBackEventHandler interface the LoadValue() method is called and the .Viewstate collection is available (this occurs after Page.InitComplete and before Page.PreLoad).
Does anyone know of any additional events that can be used to know when Viewstate is available? Or any tricks (not excluding reflection on private/protected/internal members) that can be used to know if the Viewstate has loaded or not?
View 1 Replies
Aug 5, 2010
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.
View 2 Replies
Jun 11, 2010
I stored a object in viewstate on Page. Now when i access the same viewsate object on usercontrol,it shows as null. I even tried creating the same viewstate with same name in usercontrol and page.Both holds different value. I understand that viewstate is a protected property. How does this thing implement in above scenerio or is there any other reason for this behaviour.
Edit:
Usercontrol is there in the page markup. I am not loading it dynamically. I have a page EditFacilityworkType.aspx. On page I have a usercontrol FacilityWorkTypeDetails.aspx(FacilityWorkTypeDetails1). Inside this usercontrol i have a user control Workflow.aspx(Workflow1)
Page_Load() of Page I am retrieving workflowdetails on page_load() of page.
FacilityWorktype facilityWorkType = facilityDetails.GetFacilityWorktypeDetail(SessionHelper.FacilityWorkTypeID);
ViewState["WorkFlow"] = facilityWorkType.FacilityWorkTypeWorkFlow
Inside usercontrol FacilityWorkTypeDetails.aspx. I have a property
public FacilityWorktype FacilityWorkTypeDetails
{
get
{
#region Fill FacilityWorktype
return GetEntityFromControl();
#endregion
}
set
{
PopulateControls(value);
}
}
Now i set this property in page load of page
FacilityWorkTypeDetails1.FacilityWorkTypeDetails = facilityWorkType;
Inside Workflow.aspx, I have a property
/// <summary>
/// Property to fill entity object from controls on this page
/// </summary>
public WorkFlow WorkFlowDetails
{
get
{
return GetEntityFromControls();
}
set
{
BindTranscriptionMethodDDL(ddlTranscMethod);
PopulateControls(value);
}
}
Now PopulateControls() of FacilityWorkTypeDetails1, i am setting property of workflow1
private void PopulateControls(FacilityWorktype value)
{
Workflow1.WorkFlowDetails = value.FacilityWorkTypeWorkFlow;
}
Now when i am retrieving values from
private WorkFlow GetEntityFromControls()
{
WorkFlow workFlow = (ViewState["WorkFlow"] as WorkFlow) ?? new WorkFlow();
//workFlow is null
}
So now inside this function workFlow is null. I want to ask,why is it null when i have set viewstate in page.
View 4 Replies
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
View 1 Replies
May 19, 2010
I'm handling errors from Global.asax - I would like to capture the viewstate of the page that participates in the error. Is there a way to do that?
View 2 Replies
Apr 21, 2014
If we set enable view state = false of a page then can we maintain the view state of that page ?
View 1 Replies
Jan 8, 2010
can we access viewstate and session objects at unload event of page.
View 2 Replies
Oct 9, 2010
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:
[Code]....
View 1 Replies
Jan 11, 2011
I have problem getting values from viewstate in GetTopThemes.
<asp:ObjectDataSource
ID="sourceGetTopThemes"
runat="server"
TypeName="DBConnection"
SelectMethod="GetTopThemes"
EnableViewState="true"></asp:ObjectDataSource>
[Code]....
}
[Code]....
when the page is not Posted back, I saved all values in the viewstate.
View 2 Replies
Apr 30, 2010
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?
View 7 Replies
Sep 24, 2010
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.
View 1 Replies
Dec 16, 2010
I'm using a file manager-type WebControl that does lots of postbacks. It's placed inside a Page that is relatively complex. I would like to prevent the WebControl from causing the whole Page to go through the lifecycle.
Is there any way to isolate the WebControl from the rest of the Page? The only way I can think of is sticking the WebControl in a separate Page and creating an iframe in the original Page. Unfortunately that also means my WebControl properties/settings are no longer in the original Page. If I want two instances of the WebControl with different settings, then I have to create a Page for each setting and reference the correct one in my iframes. Not quite as "drag & drop" as I would like.
View 2 Replies
Jan 15, 2010
Here's the situation - Most of this ASP.NET Web Forms application (which uses a single master page for all pages) with Forms Authentication, has a standard session timeout, but there are some "modes" where we store an encoded cookie that links the user to their account.
I would like to manually check early on in the page lifecycle for the cookie, and if certain conditions are met, manually re-establish the user's authentication ticket/session.
Where's the best place to do this? Master page Page_Init? Global.asax BeginRequest?
View 1 Replies
Mar 1, 2010
the exact difference between PreInit and Init in the ASP.NET Page LifeCycle ?
View 10 Replies
Sep 14, 2010
Does the OnActiveStepChanged method of an asp:Wizard control get processed after Page_Load and before Page_LoadComplete?
View 1 Replies
Nov 9, 2010
According to the msdn documentation, as you can see on the diagram, a server control's "Data binding events" occurs after all "control changed events". So in the case of a DetailsView control, the ItemInserted event would happen before the database operation?
View 1 Replies
Feb 9, 2011
I have a ListView in a web form (c#/.net 4.0). There is an ImageButton in the ItemTemplate.
After a postback, the ItemCommand event fires... and then everythings stops. No other page events occur. (Actually there is one other thing: Dispose() from ExtenderControlBase runs right after the event code finishes - this site has some AjaxControltoolkit controls, though there are none on this particular page).
There are a lot of things involved here so it's not really practical to post all the code, but generally, is there anything that could cause this?
I am rebinding the ListView on each postback, because I'm handling paging on the server side. When I assign the data source to the ListView, it's initially going to have no rows. So at the time the command event fires, the DataSource has no data in it, since it hasn't yet been loaded from the database and rebound. I can't think why this would cause the entire page to just stop loading, though.
The template is just this:
<ItemTemplate>
<tr>
<td class="DataListRow"><asp:ImageButton ID="edit" runat="server" ImageUrl="~/images/nav/datagrid_edit.gif" CommandName="edit" />
</td>
// a few orther cells
</tr>
</ItemTemplate>
View 1 Replies
Dec 1, 2010
In a base class,the pre-render adds a Javascript to the page.In my derived class,I want to replace the Javascript with one of my own resource script.If the script is being added like this in the base class:
this.Page.ClientScript.RegisterClientScriptResource(typeof(GeomappingEditor), "SomeSpace.Resources.Scripts.Geomapping.js");
Then can I do something like this:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
//HOW TO OVERWRITE JAVASCRIPT FILE HERE?
}
The reason why I thought this may be possible is because sometimes Javascript is added onto a page with a key like this:
this.Page.ClientScript.RegisterClientScriptInclude("geomapping", this.ApiScript);
So I know I can add another script in the page with "geomapping" being the key and it will overwrite the previous script. But it does not seem there is a key like this for "RegisterClientScriptResource".Any ideas on how to achieve this?
View 1 Replies
May 10, 2010
I'm working on an ASP.NET project in which the vast majority of the forms are generated dynamically at run time (form definitions are stored in a DB for customizability). Therefore, I have to dynamically create and add my controls to the Page every time OnLoad fires, regardless of IsPostBack. This has been working just fine and .NET takes care of managing ViewState for these controls.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
RenderDynamicControls()
}
private void RenderDynamicControls(){
//1. call service layer to retrieve form definition
//2. create and add controls to page container
}
I have a new requirement in which if a user clicks on a given button (this button is created at design time) the page should be re-rendered in a slightly different way. So in addition to the code that executes in OnLoad (i.e. RenderDynamicControls()), I have this code:
protected void MyButton_Click(object sender, EventArgs e)
{
RenderDynamicControlsALittleDifferently() [code]
My question is, is this really the only way to accomplish what I'm after? It seems beyond hacky to effectively render the form twice simply to respond to a button click. I gather from my research that this is simply how the page-lifecycle works in ASP.NET: Namely, that OnLoad must fire on every Postback before child events are invoked. Still, it's worthwhile to check with the SO community before having to drink the kool-aid.
On a related note, once I get this feature completed, I'm planning on throwing an UpdatePanel on the page to perform the page updates via Ajax.
View 1 Replies
Feb 8, 2011
In a website, if I have a class:
[code]....
How many times the query will be compiled? Every time the page loads...? Once in the application...?
View 5 Replies
Feb 17, 2010
when does the constructor on a page in asp.net page lifecycle get called?
View 1 Replies
Dec 30, 2010
If a "server-enabled" HTML tag is in a Web form, like this --
<p runat="server"/>
-- is there any way for me to attach to its rendering? I assume once they have runat="server", they must have a lifecycle of some kind.I'd like to attach some code to the rendering of any HTML tag so enabled. So, whenever a template author puts runat="server" on a tag, I can catch the PreRender (or anything else) and execute some code.
View 3 Replies
Oct 22, 2010
I'm working with dynamic fields in ASP.NET due to a very specifc and rigid end-user requirement that would take 2 hours just to explain. Suffice it to say, I can't make the requirement go away.
Anyway, I have a working solution in place; no problems with controls loading, rendering or maintaining their ViewState. This is what my OnLoad looks like:
[code]....
View 1 Replies
Feb 22, 2011
I've written a singleton class that exposes the web.config properties in a nice get property kind of way.
I want a Load method to parse the data in the config and set the public properties, and I want to throw exceptions (so they are logged in the EventLog) when a configuration key is missing or can't be parsed.
I tried placing the Load() code in Application_Start of the global.asax but then remembered this will only be run once, or until the application restarts.
Where is the best place to put code that you need to run 'everytime' your site is started/run by the user? I basically want the website to stop functioning if certain config properties cannot be loaded.
View 1 Replies