Хранение ViewState в сессии

Как можно видеть на любой ASP.NET странице присутствует скрытое поле, в котором хранится состояние всех серверных элементов страницы (ViewState) В некоторых случаях размер этого поля может стать довольно большим (значительно увеличивая размер страницы, отдаваемой клиенту). Даже отключение ViewState для некоторых элементов страницы, для которых это возможно, не всегда спасает положение.

Есть простое решение данной проблемы — хранение ViewState на сервере в сессии ASP.NET.

Для каждой страницы, для которой решено перенести хранение ViewState на сервере нужно переопределить всего один метод:

protected override PageStatePersister PageStatePersister{  get { return new SessionPageStatePersister(this); }}

Если взглянуть на код такой страницы сразу видно, насколько меньше стало содержимое ViewState.
Но что то там все равно осталось … Теперь нужно добавить в Web.config вот такие строчки:

<system.web> <browserCaps>  <case>RequiresControlStateInSession=true</case> </browserCaps></system.web>

Смотрим на код страницы — ну вот, совсем другое дело.
При желании можно найти в интернете и другие варианты решения проблемы, даже такие,
которые не затрагивают код страниц а вместо этого используют механизм адаптеров.
Но приведенный выше подход мне кажется самым простым и очевидным.

ВНИМАНИЕ!

При использовании данного подхода может возникнуть следующая проблема:
Если система «запоминает» пользователя, то есть вероятность потерять данные, которые хранятся во ViewState.

Скажем, сессия живет 10 минут. Пользователь открыл страницу и пошел пить чай. Вернулся через 15 мин. (сессия завершилась)
и нажал на странице какую нибудь кнопку. Стартует новая сессия и страница потеряв значение ViewState начинает вести себя непредсказуемо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *