Всем известно, что Asp.Net использует ViewState для сохранения информации на странице и определяемой пользователем информации между клиентом и сервером.
В версиях до 2.0 ViewState хранится в скрытых элементах управления на странице: __VIEWSTATE
Мы не можем изменить способ и место сохранения ViewState.
Теперь, в версии 2.0, Asp.Net открыла эту функцию, позволяющую мне настроить место сохранения ViewState.
В класс Page версии 2.0 был добавлен новый атрибут: PageStatePersister.
Мы можем переопределить это свойство, чтобы реализовать собственное сохранение ViewState. Это свойство возвращает экземпляр подкласса, унаследованного от класса PageStatePersister.
В версии 2.0 по умолчанию предусмотрены два метода сохранения: один — на странице (HiddenFieldPageStatePersister), другой — в сеансе (SessionPageStatePersister).
Следующий код переопределяет свойство PageStatePersister и сохраняет ViewState в сеансе:
protected override PageStatePersister PageStatePersister
{
получать
{
вернуть новый SessionPageStatePersister(this);
}
}
В дополнение к этим двум методам сохранения по умолчанию мы можем наследовать класс PageStatePersister для реализации наших собственных методов сохранения.
Следующий код демонстрирует, как сохранить ViewState в файл:
использование системы;
использование System.Data;
использование System.Configuration;
использование System.Web;
использование System.Web.Security;
использование System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.WebControls.WebParts;
использование System.Web.UI.HtmlControls;
использование System.IO;
использование System.Runtime.Serialization.Formatters.Binary;
/**//// <сводка>
/// Краткое описание CWingViewState
/// </сводка>
общедоступный класс CWingViewState: PageStatePersister
{
public CWingViewState (страница страницы): база (страница)
{
}
публичное переопределение void Load()
{
ЧитатьФайл();
}
публичное переопределение void Save()
{
ЗаписатьФайл();
}
частная пустота WriteFile()
{
FileStream file = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = новый BinaryFormatter();
bf.Serialize(файл, base.ViewState);
файл.Flush();
файл.Закрыть();
}
частная пустота ReadFile()
{
FileStream file = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = новый BinaryFormatter();
base.ViewState = bf.Deserialize(файл);
}
}
На определенных страницах:
защищенное переопределение PageStatePersister PageStatePersister
{
получать
{
вернуть новый CWingViewState(это);
}
}
Источник: .Net space БЛОГ