无法加载视图状态。加载viewstate的控制树必须与上一个请求期间用于保存viewstate的控制树匹配。
页面加载正常,直到我在页面上包含一个asp面板。然后我看到上面的错误。
有人能想到可能的原因吗? asp面板是空的,我实际上只是创建了一个测试:
<asp:Panel runat="server" ID="pnlTest"></asp:Panel>
它打破了。
答案 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
个文件处于完全相同的状态。
从你的评论中我可以看出,你正在做的就是这个......
.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; }
}
}
}