Em linguagens de programação antigas, como o ASP clássico, ao dar submit ( ou postback ) num form e na página seguinte desse um erro qualquer ao voltar na página anterior os dados que o usuário digitou seriam perdidos.
Se você quisesse que esse problema não acontecesse no submit da página armazenaria os dados digitados na session e na página do form colocaria no parâmetro value de cada tag enviada ao servidor um response.write desses valores armazenados na session.
Raramente você veria alguma funcionalidade para limpar a session dos dados não mais usados e isso poderia causar problemas relativos ao estouro da session.
Pensando neste dilema para os desenvolvedores, a Microsoft criaram um recurso para o ASP.NET que se chama ViewState.
Com esse recurso, conseguimos manter automaticamente os valores de todos os controles do form no servidor entre um
PostBack e outro da página.
Com isso mantemos a persistência dos dados em determinada página de nossa aplicação.
O ViewState é simplesmente um campo oculto e criptografado ao usuário.
Se você rodar uma aplicação ASP.NET sem qualquer controle verá que é criado um campo oculto para o armazenamento do ViewState:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZLjNDeX4oCKahG2SLd9PjlAn89xK" />
Note que os dados exibidos na propriedade Value estão criptografados, por questões de segurança.
De qualquer forma, não devemos usar o ViewState para manter dados sensíveis à nossa aplicação.
Podemos ainda adicionar valores manualmente ao ViewState, lembrando que você só conseguirá recuperá-lo entre um PostBack
e outro de uma mesma página.
Abaixo a sintaxe da atribuição de um valor à ViewState:
ViewState("Nome") = "Nome" (VB.NET)
ViewState["Nome"] = " Nome"; C#
Como um exemplo prático de como o ViewState funciona podemos imaginar o seguinte: quando, por exemplo, temos um TextBox
para o usuário digitar o nome dele, ele preenche o campo e clica no botão para confirmar.
Quando ele clica nesse botão (submit), a página sofre um PostBack, é enviada ao servidor, volta e, aquele valor
digitado, permanece no TextBox. Ou seja, não foi preciso ser feito nenhuma implementação no TextBox para
recuperarmos o valor anterior ao postback da página para o campo.
Como dito anteriormente, em ASP clássico geralmente o valor é perdido quando isso acontece.
Neste exemplo citado, nosso campo oculto armazena o nome digitado, a página sofre o PostBack e, quando voltamos à página,
o campo permanece com o nome inalterado, mantendo o princípio que chamamos de Persistência dos Dados.
Lembrando mais uma vez que os dados armazenados no ViewState automaticamente pelo engine ASP NET.
Veja a imagem Ciclo de Vida da Requisição ASP NET
Importante : Os dados só permanecerão armazenados na página corrente. O servidor
ASP NET automaticamente limpa o ViewState quando navegamos entre páginas e os dados não são mais
necessários.
Se navegarmos para outra página os dados serão perdidos.
Um detalhe: temos a opção de desabilitar o ViewState em toda a página ou apenas em um (ou mais) controle específico.
Sendo assim, se o viewstate for desabilitado os dados digitados nos controles pelo usuário serão perdidos num
submit/postback do form.