Экспресс курс по ASP .NET. День четвертый
Изучаем механизм View state
Каждый раз, когда происходит postback и форма возвращается на сервер, вы получаете всю информацию, которую пользователь вводил в любых тегах <input> или <form>. Это происходит благодаря тому, что ASP .NET создавая страничку после postback (об этом я рассказывал в предыдущем урока), присваивает значения свойств соответствующих элементов управления.
В обычных HTML-элементах введенная между запросами информация не сохраняется (ведь на самом деле отправка происходит только из одной формы). Поэтому приходится прибегать к помощи JavaScript, хранить данные, используя cookie, и т.п.
Описанную проблему как раз и решает механизм view state («состояние отображения» по-русски). Реализован этот механизм посредством скрытых полей в коде HTML странички, которые также отправляются методом POST во время отправки формы.
С одной стороны подобный механизм очень удобен и прозрачен для разработчика, но с другой стороны – увеличивается объем странички, что сказывается на объеме трафика, загрузка происходит медленнее. Хотя в последнее время этот фактор становится все менее существенным.
Итак, как я уже говорил, данные полей сохраняются в скрытых полях посредством сериализации. Таким образом, становится ясно, что не подлежащие сериализации объекты не могут быть сохранены в состоянии отображения, но такими объектами пользуются редко.
В HTML коде странички на клиентском компьютере подобные скрытые поля выглядят примерно так:
<input type="hidden" name="__VIEWSTATE" value="/wEPDwUKLTE2MjY5MTY1
NQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFDEhlbGxvIFdvcmxkIWRkZPsbiNOyNAufEt7OvNIbVYc
GWHqf" />Вы можете запретить данный механизм, установив свойство EnableViewState элемента в false. Небольшая часть, называемая control state все равно будет сохраняться в скрытом поле) для обеспечения функциональности элемента управления – ее мы запретить не в силах.
С точки зрения безопасности, описанный выше механизм – это дополнительная защита от подмены значений полей, а также случайного сбоя, ведь сериализованное значение хранит также контрольную сумму (CRC), проверяемую при десериализации.
Ну вот собственно и все о механизме view state.
Комментарии










