This article is currently in the process of being translated into Spanish (~98% done).
ViewState
Otra aproximación a persistir datos para el usuario es el ViewState (VistaEstado). Como se describió previamente en este tutorial, el ViewState permite que ASP.NET rellene los campos de los formularios cada vez que se envían datos al servidor, asegurándose que la información no se pierda cuando el usuario haga click en el botón enviar. Todo esto sucede de forma automática, a menos que se defina lo contrario, pero también puedes usar el ViewState para tus propios fines . Ten en cuenta que las cookies y las sesiones pueden ser accedidas desde todas las páginas de tu aplicación, sin embargo los valores del ViewSate no pueden enviarse entre páginas. Aquí tenemos un ejemplo sobre el uso del ViewState para enviar valores al servidor
<%@ 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 apreciar, el "NameLabel" (NombreRótulo) todavía contiene el nombre, así como también la casilla de texto. Lo primero es a causa de nosotros, mientras que la casilla de texto es mantenida por ASP.NET. Prueba eliminar el valor y presionar el segundo botón nuevamente. Verás que la casilla de texto ahora no contiene datos, pero el "NameLabel" (NombreRótulo) permaneció sin cambios, esto es debido a que el valor que guardamos en el ViewState sigue allí.
ViewState nos ayuda al guardar valores simples para ser utilizados en formularios, pero si lo que deseas es guardar datos más complejos e intercambiarlos entre páginas, deberías utilizar cookies o sesiones, tal como se describió en los capítulos anteriores.