Todo mundo sabe que o Asp.Net usa ViewState para salvar as informações da página e as informações definidas pelo usuário entre o cliente e o servidor.
Nas versões anteriores a 2.0, o ViewState é armazenado em controles ocultos na página: __VIEWSTATE
Não podemos alterar como e onde o ViewState é salvo.
Agora na versão 2.0, o Asp.Net abriu esse recurso, permitindo-me personalizar o local de salvamento do ViewState.
Um novo atributo foi adicionado à classe Page na versão 2.0: PageStatePersister.
Podemos substituir esta propriedade para implementar o salvamento personalizado de ViewState. Esta propriedade retorna uma instância de uma subclasse herdada da classe PageStatePersister.
Dois métodos de salvamento são fornecidos por padrão no 2.0: um é salvar na página (HiddenFieldPageStatePersister) e o outro é salvar na sessão (SessionPageStatePersister).
O código a seguir substitui a propriedade PageStatePersister e salva ViewState na Sessão:
protected override PageStatePersister PageStatePersister
{
pegar
{
retornar nova SessionPageStatePersister(this);
}
}
Além desses dois métodos de salvamento padrão, podemos herdar a classe PageStatePersister para implementar nossos próprios métodos de salvamento.
O código a seguir demonstra como salvar ViewState em um arquivo:
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
usando System.IO;
usando System.Runtime.Serialization.Formatters.Binary;
/**//// <resumo>
/// Descrição resumida de CWingViewState
/// </sumário>
classe pública CWingViewState: PageStatePersister
{
public CWingViewState(Página página):base(página)
{
}
substituição pública void Load()
{
LerArquivo();
}
substituição pública void Save()
{
WriteFile();
}
privado vazio WriteFile()
{
Arquivo FileStream = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize (arquivo, base.ViewState);
arquivo.Flush();
arquivo.Fechar();
}
privado vazio ReadFile()
{
Arquivo FileStream = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
base.ViewState = bf.Deserialize(arquivo);
}
}
Em páginas específicas:
substituição protegida PageStatePersister PageStatePersister
{
pegar
{
retornar novo CWingViewState(this);
}
}
Fonte: .Net space BLOG