Мне нужно получить base64-кодированное представление ViewState. Очевидно, что это будет недоступно до довольно поздней стадии жизненного цикла запроса, что нормально.
Например, если вывод страницы включает:
<input type="hidden" name="__VIEWSTATE"
id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />
Мне нужен способ на стороне сервера получить значение "/wEPDwUJODU0Njc5MD...=="
.
Чтобы уточнить, мне нужно это значение во время рендеринга страницы, а не при PostBack. Например, мне нужно знать значение ViewState, которое отправляется клиенту, а не ViewState, которое я получаю обратно от него.
Рекс, я подозреваю, что хорошим местом для начала поиска являются решения, которые сжимают ViewState - они захватывают ViewState на сервере до того, как он будет отправлен клиенту, и сжимают его. Это именно то место, где вы хотите быть.
См. эту запись в блоге, где автор описывает метод переопределения поведения по умолчанию для генерации ViewState и вместо этого показывает, как сохранить его в объекте Session сервера.
В ASP.NET 2.0 ViewState сохраняется в объекте Session. потомком PageStatePersister класс. Этот класс является абстрактным классом для сохранения и загрузки ViewsState и существует два реализованных потомка этого класса в .Net Framework, названные HiddenFieldPageStatePersister и SessionPageStatePersister. По умолчанию HiddenFieldPageStatePersister используется >. для сохранения/загрузки информации ViewState, но мы можем легко получить SessionPageStatePersister для работы и сохранять ViewState в объекте Session.
Хотя я не тестировал его код, кажется, что он показывает именно то, что вы хотите: способ получить доступ к коду ViewState еще на сервере, до постбэка.
Я включил компрессию, следуя статьям, похожим на те, что были опубликованы выше. Ключом к доступу к ViewState до того, как приложение отправит его, было переопределение этого метода;
protected override void SavePageStateToPersistenceMedium(object viewState)
Вы можете вызвать базовый метод в этом переопределении, а затем добавить любую дополнительную логику, необходимую для обработки ViewState.