Как получить значение встроенного, закодированного ViewState?

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

protected override void SavePageStateToPersistenceMedium(object viewState)

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

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