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