viewstate验证失败的原因(但有时只是)

时间:2010-02-05 11:59:59

标签: asp.net viewstate

我们的日志中会显示以下消息:

  

viewstate所在的控制树   正在加载必须匹配控件   用于保存视图状态的树   在上一个请求期间。对于   例如,添加控件时   动态地,在期间添加控件   回发必须匹配类型和   在期间添加的控件的位置   最初的要求。

嗯,这很清楚,很多关于这个主题的文章。但是,我无法重现这种行为,而且我每天只能在日志中发现几千个错误;所以它可能不那么明显。

有问题的页面有一个UpdatePanel,并根据查询字符串加载三个用户控件中的一个。

某些客户是否存在任何已知问题,或任何其他可能的解释?

2 个答案:

答案 0 :(得分:0)

一个可能问题可能是,

  • 动态加载控件
  • 你没有给他们明确的身份证明
  • 这些控制的重新创建顺序是不同的(GET与POST)

我曾经遇到过这样的问题。 Repeater也是这种行为的理想选择,因为每个Item都是一个INamingContainer。如果在回发期间Repeater的内容发生变化,您可能会收到该错误。

答案 1 :(得分:0)

我已经在页面上有更新面板的情况下看到了这种行为,并且在此之外的某个位置发生了更改,但从未传播到客户端。

解决方案是确保更改的任何值都在客户端更新。因此,当回发发生时,所有数据都与服务器端的数据相匹配。

如果您有这样的数据,您也可以将其放入更新面板。

在其上设置UpdateMode="Conditional",在您的代码隐藏中,您可以在需要更新时调用更新面板.update方法。