Когда сохранить переменную в состоянии отображения?

Я искал сеть ответ и видел, что главным образом переменные сохраняются в состоянии отображения на page.prerender событии. Затем значение переменной задержано в событии загрузки страницы.

Однако, когда я сохраняю переменную в состоянии отображения на событиях предварительного рендеринга или загрузки, как состояние отображения может сохранить значение переменной после того, как это изменяется динамично на codebehind?

Скажем, после того, как страница загружается, пользователь нажал кнопку, которая изменяет значение переменной в ее onClick событии. Затем событие возврата повысило, так как кнопка была нажата. Согласно мне, новое значение должно было быть потеряно и не может быть сохранено в состоянии отображения, если переменная сохраняется в состоянии отображения только в событии перед рендерингом. Поскольку на обратной передаче огонь привычки события перед рендерингом и значение не могут быть сохранены.

Разве я не должен сохранять переменную в состоянии отображения непосредственно перед тем, как событие возврата повышается?

Я неправ? Если так, как состояние отображения может сохранить новое значение переменной, если состояние отображения сохраняется в событии перед рендерингом?

Спасибо за ответ заранее..

5
задан Oncel Umut TURER 9 June 2010 в 23:22
поделиться

3 ответа

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

Возможно, вы слышите, что метод SaveViewState () вызывается после события PreRender . Но это не имеет ничего общего с тем, когда вы изменяете содержимое коллекции ViewState.

Контрольно-пропускные пункты 7. Выполните предварительную визуализацию объектов и 8. ViewState сохранено в статье Жизненный цикл страницы ASP.NET . Есть хорошая статья MSDN , которая также затрагивает это.

alt text
(источник: microsoft.com )

6
ответ дан 15 December 2019 в 00:51
поделиться

Согласно ASP.Net Page Lifecycle Overview (выделение мое)

PreLoad()

Вызывается после того, как страница загрузит состояние представления для себя и всех элементов управления, а также после того, как она обработает данные postback, включенные в экземпляр Request().

....

SaveStateComplete()

Вызывается после сохранения состояния представления и состояния элементов управления для страницы и всех элементов управления. Любые изменения на странице или в элементах управления в этот момент влияют на рендеринг, но изменения не будут восстановлены при следующем postback.

Поскольку события Control Events и PreRender происходят между этими двумя событиями, то ваши данные должны быть сохранены в ViewState.

0
ответ дан 15 December 2019 в 00:51
поделиться

Состояние просмотра поддерживается через скрытое поле, поэтому обратная передача должна завершиться до того, как она будет «установлена». Если вы устанавливаете его и пытаетесь прочитать в том же цикле страниц, это не сработает. Вы можете попробовать использовать объект Session, который получает / устанавливает значения в память.

-2
ответ дан 15 December 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: