【问题标题】:Failed to load viewstate when page contains viewstate variables当页面包含视图状态变量时无法加载视图状态
【发布时间】:2013-03-02 07:00:00
【问题描述】:

当我在几分钟内不使用或处理包含视图状态的页面并重新加载页面时,我收到了这个错误:

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

我已经通过设置页面设​​置enableviewstate= false得到了解决方案

但应用此功能后,viewstate 变量在此页面上不起作用。

【问题讨论】:

  • 你能显示一些代码吗?你实际上想做什么......
  • 这不是单个页面上的问题,而是在每个具有视图状态的页面上
  • enableviewstate= false 完全按照它在锡上所说的那样做,它会禁用整个页面的视图状态(某些无法关闭的控制状态除外)。它不能被单个对象或控件覆盖。将此设置为 false 时,将无法将任何对象保存到视图状态,并且大多数持久控制状态都将丢失。错误消息本身是不言自明的,Kaerber 很好地描述了可能的问题以及如何解决它。

标签: c# asp.net


【解决方案1】:

原因可能是您在 Page_Load 中动态添加了控件。 IE。您在 Page_Load 中添加一些网格,并将其视图状态保存到页面中,但是当页面回发并解析 ViewState 时,引擎无法找到解析后的 ViewState 的相应控件。

这是因为 Load 事件(由 Page_Load 处理)在 页面完全加载之后触发,即创建子项、解析和应用视图状态,但在点击触发和页面等客户端事件之前被渲染。

将动态控件添加到 Page_Init,并确保它们在每次创建时都完全相同,即在第一页初始化和回发后的页面初始化。

一个有用的链接ASP.NET Page Life Cycle

【讨论】:

    【解决方案2】:

    在我的情况下,发生此问题是因为我正在创建影响控件位置值的控件,因为它无法关闭渲染该控件的标记。通过更正控制标签,它被更正了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多