无法加载viewstate?

时间:2012-08-10 12:43:56

标签: c# asp.net controls viewstate

  

无法加载视图状态。加载viewstate的控制树必须与上一个请求期间用于保存viewstate的控制树匹配。

页面加载正常,直到我在页面上包含一个asp面板。然后我看到上面的错误。

有人能想到可能的原因吗? asp面板是空的,我实际上只是创建了一个测试:

<asp:Panel runat="server" ID="pnlTest"></asp:Panel>

它打破了。

3 个答案:

答案 0 :(得分:2)

您需要使用</asp:Panel>

关闭面板
<asp:Panel runat="server" ID="pnlTest">
</asp:Panel>

在init页面上创建动态控件

了解更多信息 http://geekswithblogs.net/FrostRed/archive/2007/02/17/106547.aspx

还有更多信息 http://blog.typps.com/2008/01/failed-to-load-viewstate-typical.html

答案 1 :(得分:1)

您遇到的问题取决于您在整个过程中途改变事物......

当您从ASP.NET请求页面时,它会使用.aspx.ascx文件中的标记。从此(以及许多其他内容,包括您在代码隐藏中创建的任何动态控件),它创建了ViewState,它存储在页面中名为__VIEWSTATE的隐藏字段中。

当您随后将页面回传到服务器(通过链接或按钮点击等)时,服务器将加载该ViewState信息,并期望{中的所有控件{1}}和.aspx个文件处于完全相同的状态。

从你的评论中我可以看出,你正在做的就是这个......

  • 从服务器请求页面(正在加载HTML,包括.ascx
  • 更改服务器上的__VIEWSTATE页面(在这种情况下添加新的.aspx
  • 将页面发回服务器并收到错误。

在第三阶段,服务器正在查看<asp:Panel>中的控件并查看.aspx中的信息...错误是因为控件不匹配< / STRONG>! 服务器不希望在页面中看到__VIEWSTATE,因为<asp:Panel>没有提及它。


因此,解决问题的方法很简单 - 只需将控件添加到__VIEWSTATE ,然后将页面加载到浏览器中

答案 2 :(得分:0)

要抑制此错误(ViewState将部分加载):

public partial class MyClass: System.Web.UI.Page
{ 
     bool StateFail;

     protected  override object LoadPageStateFromPersistenceMedium() {
        if (StateFail) return null;
        return base.LoadPageStateFromPersistenceMedium();
       }

    protected override void OnInitComplete(EventArgs e) {
        base.OnInitComplete(e);
        if (!IsPostBack) return;
        try
        {
            typeof(System.Web.UI.Page).GetMethod("LoadAllState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(this, new object[0]);
        } catch { StateFail = true; }
        }
}

}