Как получить значение встроенного, закодированного 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.