Я пытаюсь очистить старый сайт ASP.NET WebForms, где везде включен ViewState. Это проблема производительности - огромные состояния просмотра вызывают заметные задержки при отправке. Но большинству форм не требуется ViewState, за исключением некоторых сложных данных управления и формы. Даже формы без элементов управления вводом генерируют большие представления, потому что я думаю, что asp.net хранит все виды метаданных о каждом отдельном элементе управления сервером. Но состояние видимости и т. Д. Все контролируется в коде, поэтому я думаю, что могу многое устранить.
Довольно обременительно добавлять EnableViewState="false"
к каждому отдельному элементу управления (на странице и созданному в коде), который ему не нужен, поэтому я пытаюсь отключить его на уровне страницы / элемента управления и выборочно включить его для вещей, которые в этом нуждаются. (Да, я понимаю, что это рискованно, но на самом деле есть только пара больших форм и пара шаблонов, которые, в случае обращения, будут иметь большое значение).
Вот что я не совсем понимаю.
Если элемент управления или страница имеет EnableViewState="false"
его дескриптор <%.. %>
или его тег, где он создается на родительской странице, все нарушается, потому что любые данные ViewState, добавленные в код, не работают. Так что я, кажется, могу оставить его включенным на уровне управления, но для EnableViewState
установить значение false для элемента управления оболочки в каждом контейнере, а затем установить ViewStateMode=true
(который переопределяет это) на уровне управления.
То, что я не получаю, это то, что происходит, когда:
ViewStateMode = ViewStateMode.Enabled
и
EnableViewState = false
для элемента управления, который содержит другие элементы управления.
для контроля. Можно ли включить внутренние органы управления с помощью ViewStateMode
? В основном, какие настройки имеют последнее слово, когда они конфликтуют?
Для каждого контейнера я хочу иметь возможность отключить все в элементе управления оболочкой, но при этом убедиться, что:
1) Настройки ViewState в коде работают и
2) ViewState отключен для всех элементов управления по умолчанию и
3) Я могу выборочно включить ViewState для субконтроля.
Это, кажется, смущает. Если у меня есть элемент управления оберткой на главной странице, установленный на EnableViewState="false"
, но затем для субконтроля установлено значение ViewStateMode="Enabled"
, он прерывается. Согласно MS, ViewStateMode должен заменить любые внешние настройки ViewState, но, похоже, он не работает.