Я пытаюсь очистить старый веб-сайт 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, но, похоже, не работает.