【问题标题】:Viewstate hidden field so big it makes everything crashViewstate 隐藏字段如此之大,以至于一切都崩溃了
【发布时间】:2010-11-22 08:29:14
【问题描述】:

由于某种原因,我的应用程序的视图状态变得巨大(大约 1400 万个字符)。它增加了大约 1 分钟的加载时间。如果页面最终加载(不经常),每次有人发送表单时服务器都会崩溃,因为“Post size exceeded allowed limits.

突然出现。我没有添加任何字段,只是在页面上添加了一些 javascript。

人们告诉我检查视图状态分块。 Google 告诉我这样做:

<pages maxPageStateFieldLength="1024">

...所以现在我有 100 个非常大的隐藏字段,而不是一个巨大的隐藏字段。这不是我想要的。

为什么.NET 会做这样的事情?我怎样才能解决这个问题?

【问题讨论】:

  • 您可以关闭一些控件的视图状态吗?
  • 不看页面很难说,但是尝试使用视图状态解码器来查看视图状态中嵌入的内容。如果您不需要网格/表格的视图状态,您还应该关闭它们,并且除了在 IIS 上打开 gzip 之外,还应该实现压缩的视图状态。
  • 控件是输入字段,无法关闭它们的视图状态,即使这样也需要我重新编写大量代码。还有大概10个字段,应该没那么差吧……对吧?
  • @mikael:如何关闭网格/表格的视图状态?我只有输入字段,.net 是否可能决定其他一些字段需要在视图状态中?
  • 您在输入上使用视图状态做什么?如果您只需要他们在回发中记住他们的值,那么在没有视图状态的情况下也可以。

标签: .net asp.net viewstate chunking


【解决方案1】:

请记住,控件将在没有视图状态的情况下在回发中保留其值。您通常可以禁用许多控件的视图状态而不会出现任何问题。禁用特定控件集的视图状态:

EnableViewState="false"

如果您为所有网格和任何不需要视图的控件设置此选项,则会显着减小尺寸。

【讨论】:

  • 我这样做了,但并没有改变任何东西。我包括这样的 .ascx 文件: 里面有很多 JS。可以链接吗?我禁用了这些的视图状态,它没有修复它
  • 我想通了(见接受的答案)!我接受了 beska 的答案,因为这是帮助我解决问题的答案,但你的答案也很有帮助......所以 +1 非常感谢你:)!
【解决方案2】:

我建议使用实用程序来解码您的视图状态,这样您就可以了解其中的实际内容(因为您显然在那里有很多您似乎不需要的信息。)

viewstate decoder 将允许您查看您的视图状态中您不期望的内容。然后你可以修改你的代码,删除有问题的控件,或者有选择地禁用不应该启用的控件的视图状态(使用EnableViewState="false" 属性)。

【讨论】:

  • 这很烦人,软件崩溃了,显然字符串太大了。但现在我知道我的视图状态是 13 428 604 个字符长 :)
  • 它终于在我的第 5 次尝试中运行而没有崩溃 :) 看起来它正在将我的所有页面都放在视图状态中......这很奇怪。我会试着看看这里的逻辑是什么,然后再回来
  • 好吧,我想通了。我接受您的回答,因为您是带领我朝着正确方向前进的人……甚至认为克里斯的回答也对我有很大帮助。问题是这个页面是一个搜索页面......并且由于某种原因,即使没有完成搜索,它也会在视图状态中包含所有结果。我使用视图状态解码器看到了这一点。然后修复它很简单,我在保留搜索结果的 .ascx 上添加了 EnableViewState="false" 并修复了它。耶!
  • @marcgg 这就是我关闭视图状态的原因:) 很高兴你明白了。
猜你喜欢
  • 2021-06-23
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多