假设您有一个不依赖于会话的aspx页面,但依赖于viewstate来表示回发之间的持久性。
如果用户正在访问此页面并离开长时间的午餐,当他返回时,viewstate仍然有效吗?
答案 0 :(得分:14)
Viewstate本身不会过期。由于它以表格形式发布,因此可以随时重新构建。
According to MSDN:“。 ..如果页面未在会话到期时间内回发,则视图状态可能会过期”。因此,在某种方式中,如果您的会话执行,它可能会过期,但viewstate不会直接过期。由于您还没有使用会话状态,因此您不必担心隐式过期。
请注意,我不会说它过期了。我在他们自己的文章Controlling ViewState
中引用了MS答案 1 :(得分:9)
没有ViewState作为PostBack流程的一部分保留。但是,如果需要,您可以override Page class的SavePageStateToPersistenceMedium()和LoadPageStateFromPersistenceMedium()来实现该行为。有关更多信息,请阅读Understanding the ASP.NET ViewState。
请注意, Page ViewState存储在Session中,因此如果Session过期,ViewState将会丢失。我不会说这是ViewState过期,但是,它会在会话超时后被销毁。
答案 2 :(得分:5)
答案 3 :(得分:5)
此外,作为一个问题,ASP.NET默认使用自动生成的密钥加密ViewState。这可以使用web.congif文件中的MachineKey元素覆盖。即使ViewState不会过期,如果使用不同的自动生成的密钥来解密ViewState,例如在IIS重置,重新部署应用程序或命中Web场中的其他服务器之后,它也会变为无效。如果您计划长时间存储视图状态,请注意它是如何加密/解密的。
答案 4 :(得分:5)
是的,ViewState在某些条件下到期。例如,当您使用iframe时,或者当您通过常规回发维护与服务器的“实时”连接时。然后,您可能想要调查此选项:<sessionPageState historySize="9"/>
,它实际上硬编码会话中存储了多少“回发结果”(如果使用了SessionPageStatePerster)。每个回发将它的ViewState存储到Session [“__ VIEWSTATEQUEUE”]中Queue的末尾,并删除“太旧”的ViewStates。你认为SessionPageStatePerster如何通过在web.config中配置一些任意的historySize-constant来决定哪个ViewStates太旧了?Omg!我也永远找到这个问题......我对asp.net编程的仇恨现在已经无法形容了...... grrr ......
答案 5 :(得分:2)
Viewstate不会过期,只要它们仍然在页面上,它仍然会在那里运行。
答案 6 :(得分:2)
ViewState将从POST持续到POST。它实际上存储在表单上的隐藏字段中,以便它始终返回到服务器。
只要您不依赖会话,就不会有重建页面状态的任何问题。如果您愿意,可以轻松测试您的Page的状态代码:只需将您的会话设置为在web.config中60秒后过期,然后加载您的页面,等待一两分钟以上(浏览Stack Overflow并回答一些问题)然后单击页面上的按钮。
答案 7 :(得分:2)
很抱歉重温此旧帖子,但现在可以获得新信息:
是的,ViewStates过期。我来自19个小时来研究ViewStates在长时间间隔回发之间失去价值的问题。我花了一段时间阅读MSDN文档和Stackoverflow回答说除非采用自定义ViewState存储实现,否则基本上不可能发生,现在我知道,这不是真的。
我的问题发生在SharePoint 2013环境中。称为分布式缓存(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小时前那样绝望的人。
答案 8 :(得分:1)
ViewState保存在页面本身的隐藏字段中。因此,只要用户拥有该页面,他就会拥有ViewState。但是,如果你的应用程序在一段时间后自动将用户注销,那么仍然有ViewState可能对他不利。
答案 9 :(得分:1)
默认情况下,Viewstate包含在html内容中作为隐藏输入。这意味着它不会过期,但必须从用户的浏览器上传视域中的所有内容。由于这通常是公共站点中连接速度最慢的部分,因此在viewstate中放置大量内容可能会使您的站点看起来很慢。
答案 10 :(得分:1)
简短的回答是:不。
答案越长:它取决于ViewState存储的实现。您可以提供ViewState的自定义实现,该实现可能会在给定的时间后过期。例如,您可以将ViewState存储在数据库或磁盘上,并仅在隐藏字段中发送对存储值的一些引用。然后,您可以使用批处理来删除过时的ViewState数据或根据请求执行过期。
答案 11 :(得分:0)
没有Viewstate不会过期。重定向到其他页面后,视图状态的值丢失或到期视图状态。 更多细节http://www.c-sharpcorner.com/UploadFile/78d182/Asp-Net-state-management-techniques/