This article is currently in the process of being translated into Spanish (~98% done).
ViewState
Otra manera para guardar datos para el usuario, es la vista de estado 'ViewState'. Como se describió en otra parte en este tutorial, el 'ViewState' permite a ASP.NET rellenar los campos del formulario en cada llamada 'postback' al servidor. haciendo seguro que un formulario no sea limpiado automáticamente cuando el usuario presione el botón de 'enviar´. Todo esto sucede automáticamente, alménos que lo desactives, pero actualmente puedes usar el 'ViewState' para tus propios propositos. Que te quede claro, que mientras las 'cookies' y 'sessions' pueden ser accesadas por todas tus paginas en tu 'website', los valores en 'ViewState' no se cargan entre páginas. Aquí esta un ejemplo simple del uso del 'ViewState' para cargar los valores entre llamadas o 'postbacks':
<%@ 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;
}
}
Prueba replicar el ejemplo y ejecutarlo, ingresa tu nombre el la casilla de texto y presiona el primer botón. El nombre se guardará en el ViewState y se establecerá en el rótulo/etiqueta (label) también. Nada de magia por aquí. Ahora presiona el segundo botón. El mismo realmente hace nada, solo hace un post al servidor.
Como podrás notar, el nombre de la etiqueta aún contiene el mismo nombre, así mismo la caja de texto. La primera causa es debido a nosotros mismos, mientras que la caja de texto es mantenida por ASP.NET por si misma. Prueba borrando el valor y presionando el segundo botón otra vez. Veras que la caja de texto esta ahora limpiada, pero nuestra etiqueta de nombre mantiene el nombre, porque el valor que guardamos en el 'ViewState' ¡ aún esta ahí !
'ViewState' es muy útil para almacenar valores simples para usar en el formulario, pero si quieres guardar datos mas complejos, y mantenerlos de pagina en pagina, deberías considerar el uso de 'cookies' o 'sessions' como se describe en las partes previas.