The View State allows ASP.NET to repopulate form fields
on each post back to the server, making sure that a form is not automatically
cleared when the user hits the submit button. All this happens automatically,
unless you turn it off, but you can actually use the View State for your own
purposes as well.
Please keep in mind though, that while cookies and sessions can be
accessed from all your pages on your website, View State values are not carried
between pages.
Here is a simple example of using the View State to carry values between
post backs:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ViewState</title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox runat="server" id="NameField" />
<asp:Button runat="server" id="SubmitForm" onclick="SubmitForm_Click" text="Submit & set name" />
<asp:Button runat="server" id="RefreshPage" text="Just submit" />
<br /><br />
Name retrieved from ViewState: <asp:Label runat="server" id="NameLabel" />
</form>
</body>
</html>
And the CodeBehind:
using System;
using System.Data;
using System.Web;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(ViewState["NameOfUser"] != null)
NameLabel.Text = ViewState["NameOfUser"].ToString();
else
NameLabel.Text = "Not set yet...";
}
protected void SubmitForm_Click(object sender, EventArgs e)
{
ViewState["NameOfUser"] = NameField.Text;
NameLabel.Text = NameField.Text;
}
}
Try running the project, enter your name in the textbox
and press the first button. The name will be saved in the ViewState and set to
the Label as well. No magic here at all. Now press the second button. This one
does nothing at all actually, it just posts back to the server
As you will notice, the NameLabel still contains the name, but so does
the textbox. The first thing is because of us, while the textbox is maintained
by ASP.NET it self. Try deleting the value and pressing the second button
again. You will see that the textbox is now cleared, but our name label keeps
the name, because the value we saved to the ViewState is still there!
ViewState is pretty good for storing simple values for
use in the form