Как получить значение встроенного, закодированного ViewState? - PullRequest
25 голосов
/ 04 августа 2008

Мне нужно получить закодированное в base64 представление ViewState. Очевидно, что это не будет доступно до тех пор, пока в жизненном цикле запроса не будет достаточно поздно, и это нормально.

Например, если выходные данные страницы включают в себя:

<input type="hidden" name="__VIEWSTATE" 
  id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />

Мне нужен способ на стороне сервера получить значение "/wEPDwUJODU0Njc5MD...=="

Чтобы уточнить, мне нужно это значение при отображении страницы, а не в PostBack. например Мне нужно знать значение ViewState, которое отправляется клиенту, а не ViewState, который я получаю от них.

Ответы [ 3 ]

11 голосов
/ 04 августа 2008

Рекс, я подозреваю, что хорошее место для начала - это решения, которые сжимают ViewState - они захватывают ViewState на сервере перед его отправкой клиенту и распаковывают его. Это именно то, где вы хотите быть.

4 голосов
/ 04 августа 2008

См. сообщение в блоге , где автор описывает метод переопределения поведения по умолчанию для генерации ViewState и вместо этого показывает, как сохранить его на объекте Session сервера.

В ASP.NET 2.0 ViewState сохраняется потомок PageStatePersister учебный класс. Этот класс является абстрактным классом для сохранения и загрузки ViewsState и есть два реализованных потомка этого класса в .Net Framework с именем HiddenFieldPageStatePersister и SessionPageStatePersister. По умолчанию HiddenFieldPageStatePersister используется сохранить / загрузить информацию ViewState, но мы можем легко получить SessionPageStatePersister для работы и сохранить ViewState в объекте Session.

Хотя я не тестировал его код, похоже, он показывает именно то, что вы хотите: способ получить доступ к коду ViewState, пока он еще находится на сервере, перед обратной передачей.

2 голосов
/ 05 августа 2008

Я включил сжатие после статей, похожих на те, что были опубликованы выше. Ключ для доступа к ViewState перед отправкой приложением переопределял этот метод;

protected override void SavePageStateToPersistenceMedium(object viewState)

Вы можете вызвать базовый метод в этом переопределении, а затем добавить любую дополнительную логику, необходимую для обработки ViewState.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...