2009-12-16 2 views
3

Вместо использования объекта Session или хранения в базе данных я сохраняю временные переменные, которые мне нужны, чтобы сохранить переменные ViewState. Например, ViewState («MyField1») = 1ViewState потерян при обновлении в UpdatePanel?

Когда пользователь нажимает кнопку браузера Rrefresh, Page.IsPostback возвращается к False, и ViewState ушел.

Мой вопрос есть. Если пользователь может сдуть ViewState, освежившись, зачем его использовать?

Я знаю, что Refresh отправляет последнюю представленную страницу, почему сбрасывается страница. IsPostback в False и ViewState сдувается?

Пламени меня, если вы хотите для создания потенциального DUP вопроса, но я читал другие проводки здесь, и не тонет в ...

Обновления к исходному сообщению:

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

ответ

4

Когда клиент обновляет свой браузер, он повторно отправляет последний запрос на номер, выданный клиентом (который может быть GET or a POST). Он никогда не повторяет запросы AJAX, например, созданные триггерами событий панели обновления («частичные обратные обратные страницы»).

Тот факт, что Page.IsPostback является false при обновлении страницы означает, что ваш первоначальный запрос является GET, так вот что, вероятно, происходит:

1) Во время первоначального запроса, клиент не передает данных формы на сервер - следовательно, скрытое поле, содержащее данные состояния просмотра (Understanding ASP.NET View State, довольно подробно, но отлично читается, если вы действительно хотите понять, что происходит). При обработке этого запроса ASP.NET может отправить некоторое состояние просмотра клиенту, но исходный запрос - это всего лишь URL-адрес.

2) Когда пользователь нажимает кнопку в UpdatePanel, они запускают частичную обратную передачу, в течение которой MyField устанавливается в 1. UpdatePanel изменяет состояние представления клиента, чтобы отобразить новое значение.

На данный момент, если пользователь отправляет запрос POST обычным способом, например, нажав кнопку, состояние представления будет содержать обновленную информацию.

Если пользователь нажмет кнопку «Обновить», они повторно отправят исходный запрос с шага 1 без данных формы и, следовательно, не будут отображаться.

+0

См. Обновление к оригинальному сообщению – ChadD

+0

Обновлен мой ответ в свете новой информации. –

1

Где вы указываете ViewState? И где вы перечитываете значение ViewState? Возможно, oyu проверит его содержимое, прежде чем asp.net вызовет метод LoadViewState().

+0

См. Обновление до исходного сообщения – ChadD

+0

Я проверил его в событии Page_Load веб-формы – ChadD

1

Пользователь, нажав обновить и используя updatepanel, не будет работать вместе очень хорошо. Я спрашиваю, почему люди говорят, что WebForms обеспечивает простую абстракцию в веб-программировании, а некоторые переходят в mvc.

Если вы не заинтересованы в переносе, я бы дал вам совет, который не использует updatepanel для слишком длинных или больших операций, где вы можете предположить, что пользователь может обновить страницу. Используйте его для небольших вещей, таких как dropdown2, которые меняются при выборе в dropdown1.

Обертка множества функциональных возможностей в одной обновленной панели вызовет проблемы, если вы просто зависнете от состояния представления.

0

Ваш вопрос: «Зачем его использовать».

Viewstate пригодится для данных, которые, как вы знаете, генерируется почтой. Нажатие обновления - это не сообщение назад, а новый запрос.

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

Преимущество ViewState заключается в том, что он просто встроен в HTML, так что это все клиентская сторона. Если SessionState является серверной, и если вы храните большое количество данных в сеансе, вы можете заставить ваш веб-сервер или сервер db работать более усердно, чтобы обрабатывать эти данные.

Надеюсь, это поможет.

+0

Нет, я знал все это. Вопрос в том, почему кто-нибудь будет использовать его, если он очистится, когда пользователь выполнит обновление. Мое обновление моего вопроса объяснило, что оно очищается из-за использования панели обновления, но я искал объяснения. Спасибо, тем не менее :-) – ChadD

Смежные вопросы