//
you're reading...
ASP.NET

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.

How it works: ASP.NET controls have property AutoPostBack. If set to True, ASP.NET uses client side abilities of javascript to bridge the gap between client-side and server side. It is set to False by default. Because to get optimum performance if we don’t want to reach to a change event.

What ASP.NET does?

1)    ASP.NET adds a javascript function to the rendered HTML page, “_doPostBack ()”. When called, it trigger a postback , which is posting the page back to the server with all information.

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.

<input type=”hidden” name=”__EVENTTARGET” id=”__EVENTTARGET” value=”” />

<input type=”hidden” name=”__EVENTARGUMENT” id=”__EVENTARGUMENT” value=”” />

3)    _doPostBack() sets these values with the appropriate information about the event and then submitting the form

<script language=”text/javascript”>

<!–

function __doPostBack(eventTarget, eventArgument) {

var theForm = document.form1;

theform.__EVENTTARGET.value = eventTarget;

theform.__EVENTARGUMENT.value = eventArgument;

theform.submit();

}

// –>

</script>

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.

7)    ASP.NET automatically changes a client-side JavaScript event into a server-side ASP.NET event, using the __doPostBack() function as an intermediary.

Real Example:

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.

<select id=”lstCountry” onchange=”__doPostBack(‘lstCountry’,”)”

language=”javascript”>

ASP.NET ViewState:

How ASP.NET page model works: Each time the page is posted back, it loses control object information and other user information. As any changes which user do in page , changes the page from its initial state. Traditionally, statelessness has been overcome with the use of simple cookies, session-based cookies, and various other workarounds.

What is View State: It is ASP.NET integrated state serialization mechanism to keep state of page controls in postback.

How it works: Just before page code has finished running and HTML has been rendered to send back to client, ASP.NET examines all the property of control , and if any property has been changed from its initial value , ASP.NET make note of it in name/value collection like Hashtable. Then ASP.NET takes these values and serializes into Base64 String. Final string is inserted in the <form> section of page as new hidden field.

Benefits:

1)    Server resources are can be freed after each request.

2)    More scalable

Limitations:

1)    Because view state is stored in page, it results in total larger page size.

2)    ASP.NET uses view state only with page and control properties.

3)    view state isn’t a good place to store sensitive information that the client shouldn’t be allowed to see

Okay so it’s some action time, we will do an exercise to actually see how ASP.NET serializes and de-serializes page view state and how it is stored in hidden input fields.

Step 1: create a ASP.NET application

Step 2: Add a label and button

<div>

<asp:Label ID=”Label1″ runat=”server”                                              Text=”Label”></asp:Label>

<br />

<asp:Button ID=”Button1″ OnClick=”Button1_Click”                             runat=”server” Text=”Button” />

</div>

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

<configuration>

<system.web>

<pages maxPageStateFieldLength = “1024” />

</system.web>

</configuration>

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.

Cheers!

Advertisements

About Vishal

Vishal Nayan is a seasoned professional with hand on Experience on Mircrosoft Technologies. He always look for challenging IT position that allows him to learn new Microsoft Technologies while utilizing experience of Project Development and Software Engineering Ethics. A MCP in WCF ,and looking forward for more.

Discussion

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Categories

Follow Vishalnayan on WordPress.com

Blog Stats

  • 215,150 hits
%d bloggers like this: