假设您有一个不依赖于会话的aspx页面,但依赖于viewstate来表示回发之间的持久性。

如果用户正在访问此页面并离开长时间的午餐,当他返回时,viewstate仍然有效吗?

有帮助吗?

解决方案

没有ViewState作为PostBack流程的一部分保留。但是,您可以覆盖 Page类的SavePageStateToPersistenceMedium()和LoadPageStateFromPersistenceMedium(),以在需要时实现该行为。有关更多信息,请阅读了解ASP.NET ViewState

请注意, Page ViewState存储在Session中,因此如果Session过期,ViewState将会丢失。我不会说这是ViewState过期,但是,它会在会话超时后被销毁。

其他提示

Viewstate本身不会过期。由于它以表格形式发布,因此可以随时重新构建。

根据MSDN :<!> quot;。 ..如果页面未在会话到期时间内回发 <!>“,则视图状态可能会过期。因此,在某种方式中,如果您的会话执行,它可能会过期,但viewstate不会直接过期。由于您还没有使用会话状态,因此您不必担心隐式过期。

请注意,我不会说它过期了。那是我在他们自己的文章中引用的MS,名为控制ViewState

Viewstate不会过期。

所有视图状态数据都存储在客户端上,并在用户执行回发时提交回服务器。

这有一些非常有趣的含义,并且得到了非常彻底的解释此处

此外,作为一个问题,ASP.NET默认使用自动生成的密钥加密ViewState。这可以使用web.congif文件中的MachineKey元素覆盖。即使ViewState不会过期,如果使用不同的自动生成的密钥来解密ViewState,例如在IIS重置,重新部署应用程序或命中Web场中的其他服务器之后,它也会变为无效。如果您计划长时间存储视图状态,请注意它是如何加密/解密的。

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

是的,ViewState在某些情况下会过期。例如,当您使用iframe:s时,或者当您正在使用<!>时,生活<!>通过常规回发连接到服务器。然后你可能想调查这个选项:<sessionPageState historySize="9"/>,它实际上硬编码了多少<!>“回发结果<!>”;存储在Session中(如果使用SessionPageStatePerster)。每个回发将其ViewState存储到会话[<!>“; __ VIEWSTATEQUEUE <!>”;]中队列的末尾,并删除<!>“太旧<!>”的ViewStates。你认为SessionPageStatePerster如何通过在web.config中配置一些任意的historySize-constant来决定哪些ViewStates太旧了?Omg!我也永远找到这个问题......我对asp.net编程的仇恨现在已经无法形容了...... grrr ......

Viewstate不会过期,只要它们仍然在页面上,它仍然会在那里运行。

ViewState将从POST持续到POST。它实际上存储在表单上的隐藏字段中,以便它始终返回到服务器。

只要您不依赖会话,就不会有重建页面状态的任何问题。如果您愿意,可以轻松测试您的Page的状态代码:只需将您的会话设置为在web.config中60秒后过期,然后加载您的页面,等待一两分钟以上(浏览Stack Overflow并回答一些问题)然后单击页面上的按钮。

很抱歉重温此旧帖子,但现在可以获得新信息:

是的,ViewStates过期。我来自19个小时来研究ViewStates在长时间间隔回发之间失去价值的问题。我花了一段时间阅读MSDN文档和Stackoverflow回答说除非采用自定义ViewState存储实现,否则基本上不可能发生,现在我知道,这不是真的。

我的问题发生在SharePoint 2013环境中。称为分布式缓存(a.k.a。 AppFabric )的服务执行ViewState的缓存,并具有与之关联的生存时间。您可以在这里找到更多信息: http:// blogs .msdn.com / b / besidethepoint /存档/ 2013/3月27日/ AppFabric的缓存和 - SharePoint的1.aspx

有趣的信息可以在这句话中找到: <!>“为了提高页面性能,从SharePoint 2013 SharePoint开始缓存ViewState数据服务器端,而不是来回传输给客户端。<!>

我希望这些信息可以帮助那些像我19小时前那样绝望的人。

ViewState保存在页面本身的隐藏字段中。因此,只要用户拥有该页面,他就会拥有ViewState。但是,如果你的应用程序在一段时间后自动将用户注销,那么仍然有ViewState可能对他不利。

默认情况下,Viewstate包含在html内容中作为隐藏输入。这意味着它不会过期,但必须从用户的浏览器上传视域中的所有内容。由于这通常是公共站点中连接速度最慢的部分,因此在viewstate中放置大量内容可能会使您的站点看起来很慢。

简短的回答是:不。

答案越长:它取决于ViewState存储的实现。您可以提供ViewState的自定义实现,该实现可能会在给定的时间后过期。例如,您可以将ViewState存储在数据库或磁盘上,并仅在隐藏字段中发送对存储值的一些引用。然后,您可以使用批处理来删除过时的ViewState数据或根据请求执行过期。

没有Viewstate不会过期。重定向到其他页面后,视图状态的值丢失或到期视图状态。 有关详细信息,请访问 http://www.c-sharpcorner的.com / UploadFile / 78d182 / ASP-Net的状态管理的技术/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top