Як видалити viewstate зі сторінки

Як видалити viewstate зі сторінки
За що розробники недолюблюють Asp.Net, так це за величезні обсяги сторінок. Стан серверних компонентів зберігається прямо на сторінці в прихованому полі ViewState, видалити яке без відчутних наслідків, на перший погляд, не представляється можливим. Найбільш «жирні» сторінки можуть зберігати в ньому мегабайти даних.

На зміну жаху і нерозуміння приходить бажання розібратися, як видалити ViewState або, як мінімум, скоротити обсяг зберігається в ньому?

На жаль, вміст Asp.Net-сторінок не піддається ручному формуванню. І це викликає величезне обурення у деяких розробників. Наприклад, в тому ж PHP програміст повністю формує вміст сторінки, контролюючи кожен символ. До речі, в Asp.Net MVC такого неподобства, як ViewState, вже немає.

Давайте розберемося, навіщо потрібен ViewState, і що в ньому зберігається? Поїхали!

ViewState зберігає дані про всіх серверних контролю. Всі властивості контрола, у якого runat = "server" зберігаються там;

ViewState відстежує зміну стану серверних компонентів;

При перезавантаженні сторінки відновлює стан компонентів;

Всі дані зберігаються в серіалізовані вигляді в прихованому полі прямо на сторінці.

З усього вищесказаного, очевидно, що ViewState - корисна штука, і його грубе відключення призведе до того, що після перезавантаження сторінки контроли перестануть зберігати введену в них інформацію, все змінені властивості будуть замінені дефолтними. Загалом, гратися тут потрібно дуже обережно.

Видалення ViewState можна провести двома способами:

прибрати ViewState у контролів, що не зберігають інформацію про свій стан;

перенести зберігання стану з прихованого поля ViewState на сервер додатки.

Давайте докладніше розглянемо кожен спосіб.

Видалення ViewState за допомогою властивості EnableViewState

У Asp.Net у кожного серверного контрола є властивість EnableViewState. За замовчуванням воно дорівнює true. Це означає, що елемент зберігає свій стан в поле ViewState на сторінці. Якщо у властивостях контрола проставити EnableViewState = "false", то його стан перестане зберігатися. Наприклад, якщо у вас на станиці є Label, який при PostBack не змінює своїх властивостей, то йому можна і навіть потрібно відключити ViewState.

Обережно грайтеся з цим властивістю, інакше при PostBack можна втратити поточний стан контрола.

Примітка. Можна відключити ViewState на рівні сторінки, поставивши в тезі Page атрибут EnableViewState = "false". Тоді приховане поле ViewState взагалі зникне зі сторінки, а все контроли перестануть зберігати дані про свій стан.

Перенести зберігання стану з поля ViewState на сервер додатки

Цей спосіб мені подобається більше, тому що по суті ми нічого не відключаємо, а просто змінюємо місце зберігання інформації про стан серверних компонентів. Будемо змінювати поведінку сторінки за допомогою класу PageAdapter з збірки System.Web.UI.Adapters.

Пару рядків про те, що таке Адаптер сторінки? Це надбудова над стандартним обробником сторінок, яка дозволяє перевизначати поведінку сторінки.

У нашому веб-додатку створимо клас MyPageAdapter.cs наступного змісту:

Тут ми переписуємо місце зберігання стану компонентів. За замовчуванням використовується HiddenFieldPageStatePersister (це наше приховане поле ViewState на сторінці). Ми ж замінюємо його на SessionPageStatePersister, тобто вказуємо, що тепер ми будемо зберігати стан уявлення ASP.NET-сторінки на веб-сервері.

Тепер потрібно, щоб наші сторінки дізналися, що у них є такий PageAdapter. Для цього в каталозі App_Browsers нашого сайту створюємо файлик BrowserFile.browser наступного змісту:

Файл з розширенням .browser в загальному випадку призначений для того, щоб визначити можливості браузера. Наприклад, щоб дати різні версії сайтів настільним і мобільним браузерам. Адаптери можуть використовувати дані з цього файлу для адаптації своєї поведінки. Що ми, власне, і зробили.

Ось, в принципі, і все! Тепер всі дані про стан подання сторінок зберігаються в сесії на сервері веб-додатки.

1. За допомогою точкового відключення властивості EnableViewState у контролів, що не змінюють свій стан при PostBack, можна скоротити обсяг захаращувати інформації в прихованому полі ViewState на сторінці.

2. За допомогою перенесення зберігання стану контролів з клієнтської сторінки на сервер можна домогтися істотного скорочення ваги сторінок. Запис в 200 Кб скорочується до лаконічного

Вам також може бути цікаво:

Схожі статті