Это XML-визуализация вашего опубликованного состояния:
<viewstate>
<Pair>
<Pair>
<String>1382774129</String>
</Pair>
</Pair>
</viewstate>
<controlstate>
<HybridDictionary>
<DictionaryEntry>
<String>__ControlsRequirePostBackKey__</String>
<ArrayList>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut1</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut1</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut2</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut2</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut3</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut4</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut4</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut5</String>
<String>ctl00$ContentPlaceHolder_MainContent$RadBut5</String>
</ArrayList>
</DictionaryEntry>
</HybridDictionary>
</controlstate>
В основном лишь несколько радиокнопок, которые хотели бы знать об их существовании (браузеры не отправляют поле <input type="radio">
с постданными, если оно не отмечено). Это уже довольно минимально.
Скорее всего, его можно сжать, подключив методы загрузки / сохранения или модули HTTP, но это может быть не очень практичным и не нужно.
В случае, если в вашем реальном приложении намного больше представление, избегайте попадания каких-либо объектов в него. Это может быть достигнуто путем инициализации элементов управления в методах OnInit()
или Page_Init()
вместо значения по умолчанию Page_Load()
.
Обоснование этого можно найти на
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx
и http://msdn.microsoft.com/en-us/library/ms972976.aspx
Краткое резюме:
- ViewState - это просто хранилище для почти всех свойств элемента управления, включая значения по умолчанию.
- После установки значений по умолчанию
OnInit()
вызывается метод TrackViewState()
.
- Любые последующие изменения (например,
Page_Load()
) или обработчик событий будут отслеживаться и отправляться клиенту. Таким образом, эти элементы управления могут восстановить свое состояние при следующем запросе.
- Вместо того чтобы полагаться на каркас для восстановления объектов, восстанавливайте объекты в
OnInit()
при необходимости. (например, повторное заполнение параметров DropDownList
из базы данных).
Одно исключение:
Если элемент управления динамически добавляется в дерево элементов управления, он воспроизводит данные. Их метод OnInit()
может быть запущен позднее, в результате чего эти свойства в конечном итоге окажутся в состоянии просмотра. Если инициализация элемента управления не может произойти в OnInit()
, в качестве обходного пути можно использовать настройку EnableViewState="false"
.
Каждый раз, когда мое состояние просмотра неожиданно увеличивается, я использую приложение ViewState Decoder 2.2, чтобы выяснить, что же произошло в состоянии просмотра. Часто это не требуется для данных.
И последнее слово:
Состояние просмотра не используется для повторного заполнения форм !!
Эти значения уже отправлены с постданными.