【问题标题】:Failed to load viewstate. The control tree into which viewstate is being loaded无法加载视图状态。正在加载视图状态的控件树
【发布时间】:2012-08-03 12:44:27
【问题描述】:

在 UserControl 内托管的 ASP.NET 表单上进行 HTTP POST 后,我收到以下错误消息:

加载视图状态失败。正在加载视图状态的控制树必须与在先前请求期间用于保存视图状态的控制树匹配。例如,动态添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。

这里是附加信息:

  • 我正在运行 .NET 4.5 RC
  • 这是一个基于 Umbraco 4.7 的网站
  • 在我的本地开发机器上,表单完美运行
  • 此错误仅发生在具有 .NET 4.5(仅)、MSSQL 2012 Express、IIS 7.5、Windows 7 的临时服务器上(我知道,它还不是真正的服务器,也许有一天......)
  • 服务器不是网络农场(或花园,但应该无关紧要)的一部分
  • 用户控件动态呈现控件

我已经应用了所有最新的服务包。 我现在已经没有想法了!我什至重新启动它并在服务器上表演了一场涉及歌曲和特殊舞蹈的richual,但无济于事。

【问题讨论】:

标签: asp.net .net umbraco .net-4.5 asp.net-4.5


【解决方案1】:

当您动态添加控件时,重要的是要添加它们的事件。

如果您在加载后发生的事件上添加了控件,它们将成为您发送给客户端的视图状态的一部分。

在调用LoadViewState 之前,您必须再次添加这些控件。

如果您遇到添加哪些控件的决定本身存储在ViewState 或控件的值中的情况,那么请记住,即使在加载ViewState 之前,此数据在Request.Params 中也是可用的

请参考asp.net page life cycle

【讨论】:

  • 谢谢你……但是,由于它在我的开发机器上工作,它极不可能是一个编码错误,否则当你部署它时一切都会不断地中断。
  • 如果服务器上的同一个测试用例失败了,我就没主意了。但这通常是编码错误。从未见过这是部署错误。
  • 没错!我可以做一些关于编码错误的事情,但这很奇怪。还是谢谢
  • 啊,是的,我明白了,你们都在使用 WebForms!
  • Request.Params 帮助我找到了解决方案!谢谢!
【解决方案2】:

我刚刚将EnableViewState="false" 添加到我的页面占位符中,但它已经消失了。希望它也适用于你。

【讨论】:

  • 我也收到了这个错误,我的页面有 gridview 并且使用 gridview 的EnableViewState="False" 问题解决了。
【解决方案3】:

此错误主要发生在视图状态更改期间:从一个模板到另一个模板,例如在 ASP .net 中的表单视图、列表视图、详细信息视图、网格视图等控件中的项目模板、编辑项目模板(所有框架);

从控制状态更改时说Item Template ---> Edit Template 以下内容将会改变

1) 控件将发生变化(其 ID 和状态)

2) 它的位置会改变。

在转换视图时,如果发生任何回发,您将收到错误消息

加载视图状态失败。视图状态所在的控制树 正在加载中......

如果您使用单独的控件进行数据绑定,例如(按钮、链接按钮_图像按钮事件),您将收到此错误报告!

为了避免这个错误>>> 一旦状态从一个模板改变到另一个你调用数据源绑定的方法(不要在点击或任何后期支持事件期间调用)。

【讨论】:

  • 感谢朋友您给出的正确理由
【解决方案4】:

好的,所以答案是字面意思:“使用与上一个相同的软件设置一个新服务器,然后再试一次”,它现在可以工作了。

【讨论】:

  • 注意:哦,不,安装 Windows 8 / .NET 4.5 RTM 后问题又回来了。
  • 问题的原因似乎与 System.Web.Optimization Bundles 有关,因为它在我关闭时工作
  • 好的,我可以看到将 System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl 添加到我的母版页会阻止 ViewState 正常运行。
  • 您应该用您的发现更新问题 - 并接受答案,因为这里仍有活动 :-)
【解决方案5】:

我添加了与id相同的值的“name”属性,然后这个问题就消失了。

<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button   textonly" />

【讨论】:

    【解决方案6】:

    我遇到了同样的问题。这个问题在客户端,但在我的本地系统中没有发生。 经过数小时的谷歌搜索,我已将 EnableViewState="false" 写入包含所有动态控件的 aspx 页面中的表标记,然后我删除了所有 viewstate 变量,而是在 aspx 页面中创建了一些隐藏的文本框并将 DB 值接受到它们在代码后面并在我的代码中使用它们。然后它解决了我的问题。 但是,我仍然无法弄清楚到底是什么问题。

    【讨论】:

      【解决方案7】:

      在我的情况下,我在页面加载时操纵了 asp:Literal.Text 属性,这导致了问题。在所有其他情况下,这从未导致我出现视图状态错误,但在这种特殊情况下,我将 .Text 值更改为 html 元素。

      导致错误的原因如下:

      <asp:Literal ID="SvgIcon" runat="server" />
      

      SvgIcon.Text = "<svg version=\"1.1\" id=\"Layer_1\" bla bla />"
      

      我能够通过将 EnableViewState="false" 显式添加到控件来解决错误:

      <asp:Literal ID="SvgIcon" runat="server" EnableViewState="false" />
      

      【讨论】:

        【解决方案8】:

        检查是否在页面加载事件中直接有控件的绑定方法。这可能会导致此问题。

        【讨论】:

          【解决方案9】:

          您可以为每个用户控件添加新的 PlaceHolder

          如果不需要视图状态,可以在控件上设置enableviewstate=false

          【讨论】:

            【解决方案10】:

            就我而言,我有一个带有 (OnPageIndexChanging) 事件的网格视图 当我点击一个页面时,除非我点击它两次,否则什么都不会发生!

            我在设置新页面索引之前正在刷新数据源。


            这是我做错了

            grd.DataSource = data;
            grd.DataBind();
            grd.PageIndex = e.NewPageIndex;
            

            这是正确的方法

            grd.PageIndex = e.NewPageIndex;
            grd.DataSource = data;
            grd.DataBind();
            

            【讨论】:

              【解决方案11】:

              如果您在控件中覆盖 SaveViewState 但未覆盖 LoadViewState,则可能会发生这种情况。

              【讨论】:

                【解决方案12】:

                所以我实际上最终发现我绑定的实体列表与 ViewState 中的控件的顺序不同!我仍在通过更清洁的解决方案工作,但我的代码正在使用 ViewStateEnabled = true,方法是让重建我的动态控件(从 Page_Load 调用)的方法在 !IsPostBack 的情况下以不同的方式执行。

                最终,我可能需要为我的嵌套动态控件修复我的排序算法,但我只想说:如果您使用与我相同的模式,使用 List 生成/绑定到动态控件,以及该顺序是流动的或不断变化的,请尝试比较 Request.Params 以找到与您的控制层次结构相关的键,并查看它们是否与您的列表的顺序相匹配。这解决了我的问题。感谢@nunespascal!

                简而言之,我在 AjaxToolkit 选项卡控件中动态生成除一个选项卡之外的所有选项卡,然后使用几层深占位符和常规控件(文本框、下拉列表等)填充该选项卡,这就是为什么获取一切顺序正确。

                【讨论】:

                  猜你喜欢
                  • 2012-05-14
                  • 2011-01-31
                  • 2015-07-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多