Подтвердить что ты не робот

Минимизация viewstate-confused с помощью `EnableViewState` и` ViewStateMode` в asp.net 4.0

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

4b9b3361

Ответ 1

Согласно статье MSDN на ViewStateMode, ViewStateMode имеет смысл только при EnableViewState="true". Чтобы добиться того, чего вы хотите, вам нужно оставить ViewStateMode="Enabled" в элементе управления, а затем обернуть суб-элементы управления основным в asp:Placeholder, который имеет ViewStateMode="Disabled". Таким образом, вы можете манипулировать ViewState в коде, но ни один дочерний элемент управления не будет иметь ViewState (кроме тех, которые вы явно установили для него через ViewStateMode="Enabled").