Как получить значение built, encoded ViewState?

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

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

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

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

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

3 ответа

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

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

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

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

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

    protected override void SavePageStateToPersistenceMedium(object viewState)
    

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