Looking deep inside PostBack and ViewState in ASP.NET 3.5
Introduction: ASP.NET helps in rapid development of web forms in similar way our window counterpart writes code to develop window application for desktop. Development is rapid in window application because of many reason, i.e. there is no page life cycle etc.
Major Difference between Window Application and ASP.NET
1) Web applications are executed on server, while window applications are executed at client side. In web application, users sees web forms in browser and provide inputs, which is posted back to server. ASP.NET handles this GAP between browser and server by a technique called PostBack, which send the page and all other user information to the server when certain action is performed.
2)ASP.NET used HTTP wire which is Stateless: for every round trip, and before the HTML output is rendered, all the user information and web page controls objects are destroyed. Although this is good to avoid heavy traffic application, but its challenging to maintain a seamless experience to user. So to maintain persistence state, ASP.NET uses a technique called ViewState.
3)Event Model: Window programmer have upper edge when it comes to programming rich event model, say programming for mouse click , key presses, or any other low level control interaction. But when it comes to ASP.NET, client actions happen at the client side and server processing takes place at server. This means there is certain amount of overhead involved in responding to event in ASP.NET
ASP.NET Control Automatic PostBack:
Description: The only option to send a page, both for HTML and ASP.NET is by clicking a submit button. Although when page is posted, ASP.NET fires other event. This model is extended in ASP.NET control with an Automatic Postback Feature. I.e. input control can fire different triggers and server side code can handle it immediately.
What ASP.NET does?
2)ASP.NET adds two hidden input fields that the _doPostBack () function uses to pass information back to the server. One is ID of the control that raises the event and second is any other information.
3)doPostBack() sets these values with the appropriate information about the event and then submitting the form
4)ASP.NET generates _doPostBack() automatically.
5)Code inside this function grows, as more we add autopostback controls on the page.
6)Control whose AutoPostBack property is true is attached with _doPostBack() method by onClick or onChange property.
Say we have a List control whose AutoPostBack property is set to True. So it post back automatically when ever use changes the selection in the list, the client side onChange fires up. The browser then calls _doPostBack() which send page back to the server.
Step 3: Write handler for Button1_Click.
protected void Button1_Click(object sender, EventArgs e)
//retrieve the view state string for the current web page using server-side
string viewStateString = Request["__VIEWSTATE"];
// viewStateString contains the view state information.
// Convert the Base64 string to an ordinary array of bytes
// representing ASCII characters.
byte stringBytes = Convert.FromBase64String(viewStateString);
// Deserialize and display the string.
string decodedViewState = System.Text.Encoding.ASCII.GetString(stringBytes);
Label1.Text = decodedViewState;
The view state string isn't human readable-it just looks like a series of random characters.
When you look at the decoded view state string, you'll see something like this:
? -162691655dd-Text Hello, worldddd????4 ?????U?Xz?
Note : You can notice that the value is quite visible in this random generated string, so it's not advisable to store sensitive data in view state .
What is View State Chunking?
Scenario: When page size becomes considerably high to one limit, few firewalls and proxy servers doesn't allow the pages to pass. To overcome such problem, we have a technique called View State Chunking, which automatically divides view state into multiple fields to ensure that no hidden field exceeds a size threshold you set.
How to activate View State Chunking: We need to add few lines of code in web.config file usner system.web
So when we request a page that generates a view state size larger than this value , several hidden input fields will be created.
I Hope you enjoyed this ride.