Как полностью исключить использование __VIEWSTATE на одной странице?

На страницу входа в наше веб-приложение периодически попадают сообщения об ошибках из поврежденного состояния. Почему это происходит, не имеет значения - некоторые из них могут быть скриптами или чем-то еще. Мне сказали, чтобы устранить эти ошибки. Сначала я отключил viewstate для страницы. Это все еще оставляло короткий __VIEWSTATE, который, возможно, был "пустым", но все еще имел структуру. Это не помогло предотвратить ошибки.

Затем я переопределил методы SavePageStateToPersistenceMedium и LoadPageStateFromPersistenceMedium страницы с помощью no-ops. Это исключило весь контент в __VIEWSTATE... но все равно не решило проблему с ошибкой. Скрытое поле все еще существует на странице, и если вы установите какое-либо значение в нем перед обратной передачей, оно все равно выдаст исключения, которые говорят: "Информация о состоянии недопустима для этой страницы и может быть повреждена".

Ошибка генерируется ClientScriptManager.ValidateEvent, который вызывается TextBox.LoadPostData или HiddenField.LoadPostData, если у меня нет серверных текстовых полей. Я не понимаю, почему он считает, что должен проверять состояние, когда он деактивируется на уровне страницы и нейтрализуется на этапах сохранения / загрузки, но настаивает на этом. Могу ли я что-то перегрузить, чтобы предотвратить эту бесполезную проверку?

Мой начальник хочет, чтобы я полностью освободил эту страницу от поведения состояния просмотра, чтобы она не генерировала и не реагировала ни на какие формы данных, связанных с состоянием просмотра. Он хочет, чтобы любые опубликованные данные никогда не вызывали какой-либо код, связанный с состоянием вида. Но все обычные проверки должны оставаться на месте для остальной части приложения; Изменения применяются только к этой странице. Как это можно сделать?

[обновление] Еще одна вещь, которая не работает, это переопределить метод PageStatePersister страницы. Я также пытался предотвратить вывод скрытого поля в методе рендеринга страницы, но если я добавлю его обратно для публикации, исключение все равно произойдет.


[обновление]... Я думаю, что мой босс теперь готов отказаться от выполнения этого. Но если кто-то придет с ответом, вы, безусловно, восхищаетесь.

1 ответ

Вы смотрите на Control State что происходит внутри viewstate HTML-поле.

Состояние управления используется, например, для хранения информации о пейджере: https://msdn.microsoft.com/en-us/library/1whwt1k7.aspx

Расшифруйте его, чтобы посмотреть: как декодировать представление состояния

Другие вопросы по тегам