Срок действия представления истекает? - PullRequest
21 голосов
/ 24 октября 2008

Допустим, у вас есть страница aspx, которая не зависит от сеанса, но полагается на viewstate для обеспечения устойчивости между обратными передачами.

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

Ответы [ 12 ]

14 голосов
/ 24 октября 2008

Срок действия самого представления не истекает. Поскольку он отправлен обратно в форму, его можно восстановить в любое время.

Согласно MSDN : ". .. возможно, что состояние просмотра истекает, если страница не будет отправлена ​​обратно в течение времени истечения сеанса ". Таким образом, в некотором роде, он может истечь, если ваша сессия имеет, но состояние представления не истекает напрямую. Так как вы все равно не используете состояние сеанса, вам не нужно беспокоиться о неявном истечении срока действия.

Обратите внимание, что я бы не сказал, что он истек. Это была MS, которую я процитировал в своей статье под названием Управление ViewState

9 голосов
/ 24 октября 2008

Нет ViewState хранится как часть процесса PostBack. Однако вы можете переопределить класса SavePageStateToPersistenceMedium () и LoadPageStateFromPersistenceMedium () класса страницы, чтобы реализовать это поведение при желании. Для получения дополнительной информации прочитайте Понимание ASP.NET ViewState .

Обратите внимание, что Page ViewState хранится в сеансе, поэтому, если срок действия вашего сеанса истечет, ViewState будет потерян. Я бы не сказал, что срок действия ViewState истекает, но да, он будет уничтожен после истечения времени ожидания сеанса.

5 голосов
/ 21 марта 2011

Да, ViewState истекает в определенных условиях. Например, когда вы используете iframe: s или когда вы поддерживаете «живое» соединение с сервером с регулярной обратной передачей. Затем вы можете захотеть изучить эту опцию: <sessionPageState historySize="9"/>, которая фактически жестко кодирует, сколько «результатов обратной передачи» хранится в сеансе (если используется SessionPageStatePerster). Каждая обратная передача сохраняет свой ViewState до конца очереди в сеансе ["__ VIEWSTATEQUEUE"] и удаляет ViewStates, которые являются "слишком старыми". И как вы думаете, SessionPageStatePerster решает, какие ViewStates являются слишком старыми ... путем настройки произвольной постоянной historySize в web.config ... Omg! Я тоже навсегда нахожу эту проблему ... Моя ненависть к программированию на asp.net сейчас неописуема .. grrr ...

5 голосов
/ 24 октября 2008

Кроме того, по умолчанию ASP.NET шифрует ViewState с помощью автоматически сгенерированного ключа. Это можно переопределить с помощью элемента MachineKey в файле web.congif. Хотя срок действия ViewState не истекает, он может стать недействительным, если для расшифровки ViewState используется другой автоматически сгенерированный ключ, например после сброса IIS, повторного развертывания приложения или попадания на другой сервер в веб-ферме. Если вы планируете хранить состояние представления в течение длительного периода времени, следите за тем, как оно шифруется / дешифруется.

http://msdn.microsoft.com/en-us/library/ms998288.aspx

5 голосов
/ 24 октября 2008

Срок действия не истекает.

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

Это имеет некоторые очень интересные последствия и очень подробно объясняется здесь .

2 голосов
/ 20 июня 2014

Извините, что оживил эту старую ветку, но теперь доступна новая информация:

Да, ViewStates expire . Я пришел из 19 часов, исследуя проблему потери значений ViewStates между обратными передачами с большим интервалом времени. Чтение документов MSDN и ответов Stackoverflow заняло у меня некоторое время, сказав, что это было бы в принципе невозможно, если бы не была применена специальная реализация хранилища ViewState, что, насколько я знаю, не соответствует действительности.

Моя проблема возникала в среде SharePoint 2013. Служба, известная как Distributed Cache (a.k.a. AppFabric ), выполняет кэширование ViewState и имеет Время жизни , связанное с ней. Вы можете найти больше информации здесь: http://blogs.msdn.com/b/besidethepoint/archive/2013/03/27/appfabric-caching-and-sharepoint-1.aspx

Интересная информация может быть найдена в этой фразе: "Для повышения производительности страницы, начиная с SharePoint 2013, SharePoint кэширует данные на стороне сервера ViewState, а не передает их назад и вперед клиентам."

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

2 голосов
/ 24 октября 2008

ViewState будет сохраняться от POST к POST. На самом деле он хранится внутри скрытого поля в вашей форме, поэтому он все время отправляется обратно на ваш сервер.

Пока вы не полагаетесь на сессию, у вас не должно возникнуть проблем с восстановлением состояния страницы. Тем не менее, легко проверить код состояния вашей страницы, если вы хотите: просто установите срок действия сеанса через 60 секунд в файле web.config, затем загрузите страницу, подождите немного больше (зайдите в Stack Overflow и ответьте на некоторые вопросы) а затем нажмите кнопку на своей странице.

2 голосов
/ 24 октября 2008

Срок действия представления не истекает, пока они все еще находятся на странице, они все еще будут там и работоспособны.

1 голос
/ 24 октября 2008

Краткий ответ: нет.

Более длинный ответ: это зависит от реализации хранилища ViewState. Вы можете предоставить пользовательскую реализацию ViewState, срок действия которой может истечь через заданный промежуток времени. Например, вы можете сохранить ViewState в базе данных или на диске и отправить только некоторую ссылку на сохраненное значение в скрытом поле. Затем вы можете использовать пакетную обработку для удаления устаревших данных ViewState или выполнения срока действия по запросу.

1 голос
/ 24 октября 2008

По умолчанию Viewstate включено в html-контент как скрытый ввод. Это означает, что он не истечет, но все в viewstate должно быть загружено из браузера пользователя. Поскольку это обычно самая медленная часть соединения на общедоступном сайте, размещение большого количества материала в viewstate может быстро сделать ваш сайт очень медленным.

...