Если любое из свойств изменялось, ASP.NET сохраняет эту информацию в коллекции имя-значение. Наконец, ASP.NET сериализирует всю собранную информацию в строку Base64. (Строка Base64 обеспечивает отсутствие спецсимволов, недопустимых в HTML.) Окончательная строка вставляется в раздел страницы <form> как новое скрытое поле.

При обратной отсылке страницы ASP.NET выполняет следующие действия:

  1. Повторно создает страницу и объекты элементов управления на основе правил по умолчанию. Поэтому страница находится в том же состоянии, в котором была при первом запросе.
  2. Выполняет десериализацию информации о состоянии и обновляет все элементы управления. В результате страница возвращается в состояние, в котором находилась перед последней отправкой клиенту.
  3. Напоследок осуществляется настройка страницы в соответствии с отправленными данными формы. Например, если пользователь ввел новый текст в текстовом поле или же сделал новый выбор в окне списка, эта информация разместится в коллекции Form и используется ASP.NET для подгонки соответствующих элементов управления. После этого страница отображает текущее состояние при ее просмотре пользователем.
  4. Теперь в действие вступает ваш код обработки событий. ASP.NET генерирует соответствующие события, и ваш код может реагировать изменением страницы, перемещением на новую страницу или же выполнением какой-то другой операции.

Использование состояния вида является прекрасным решением, поскольку серверные ресурсы могут освобождаться после каждого запроса, допуская масштабируемость сотен или тысяч запросов без замедления работы сервера. Однако за все приходится платить. Хранение состояния вида на странице увеличивает размеры страницы. Это оказывает двойное влияние на клиент, поскольку ему необходимо не только получить страницу больших размеров, но и вернуть скрытые данные о состоянии вида серверу со следующей обратной отправкой. Поэтому много времени уходит на получение и отправку страницы. Для простых страниц эти издержки минимальны, но при настройке сложных элементов управления с большим количеством данных наподобие GridView информация о состоянии вида может существенно увеличиться. В таких случаях можно отключить состояние вида для элемента управления путем установки его свойства EnableViewState равным false. Однако в таком случае придется повторно инициализировать элемент управления при каждой обратной отправке.

На заметку! Даже при установке EnableViewState равным false элемент управления все еще может стараться сохранить меньшее количество информации о состоянии вида, которую он "считает" критичной для надлежащего функционирования. Эта привилегированная информация о состоянии вида известна как состояние элемента управления (control state), и запретить ее нельзя. Однако в хорошо разработанном элементе управления размер, необходимый для состояния элемента управления, будет значительно меньше размера всего состояния вида. Состояние вида является новым в ASP.NET 2.0, и вы увидите его в действии при разработке своих собственных элементов управления в главе 27.

предыдущая    следующая страница   оглавление

109

Hosted by uCoz