Мне любопытно посмотреть, работает ли подход Самуила. Если вы попробуете это, пожалуйста, опубликуйте свой результат.
Я не говорю, что Самуил не прав, мне просто любопытно.
Причина, по которой мне любопытно, заключается в том, что, поскольку viewstate рекурсивно сериализуется (как упомянул Сэмюэль), если у вас есть один элемент управления с включенным viewstate, который был дочерним по отношению к элементу управления с отключенным viewstate, то дочерний элемент управления не будет иметь viewstate, потому что рекурсивная сериализация полностью пропустит его на родительском уровне. Это особенно беспокоит, если вы создали свои собственные пользовательские элементы управления, которые, естественно, содержат много дочерних элементов управления.
Другим решением было бы использовать метод служебных методов Самуэля, но вместо того, чтобы отключать все, просто отключить его для таких элементов управления, как Label, Literal и т. Д., У которых нет детей ... или если у них есть дети, то все в порядке, если у детей есть состояние просмотра отключено.
Вы, естественно, хотели бы избежать отключения состояния просмотра панелей и заполнителей по причине, указанной выше.
Edit:
Public Shared Sub DisableViewState(ByVal cntrl As Control)
If TypeOf cntrl Is Label Then
cntrl.EnableViewState = False
ElseIf TypeOf cntrl Is Literal Then
cntrl.EnableViewState = False
ElseIf TypeOf cntrl Is Button Then
cntrl.EnableViewState = False
Else
If cntrl.Controls IsNot Nothing Then
For Each subControl As Control In cntrl.Controls
DisableViewState(subControl)
Next
End If
End If
End Sub