Срок действия представления истекает?

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

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

12 ответов

Решение

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

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

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

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

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

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

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

Viewstate не истекает.

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

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

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

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

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

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

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

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

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

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

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

Короткий ответ - нет.

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

ViewState хранится в скрытом поле на самой странице. Так что, пока у пользователя есть страница, у него будет ViewState. Но если ваше приложение автоматически выходит из системы через определенный промежуток времени, все равно наличие ViewState может не принести ему пользы.

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

Нет Viewstate не истекает. После перенаправления на другую страницу, то значение состояния просмотра потеряно или истекает viewstate. для получения более подробной информации http://www.c-sharpcorner.com/UploadFile/78d182/Asp-Net-state-management-techniques/

Другие вопросы по тегам