如何确定哪个控件导致ViewState加载失败

本文关键字:ViewState 加载 失败 控件 何确定 | 更新日期: 2023-09-27 18:08:38

我的页面面临Viewstate加载问题。

Page有登录功能,可以登录管理员和非管理员用户。当非管理员用户登录页面并单击启用了自动回退的复选框时,会出现奇怪的行为。(错误详情如下)

后来我发现,在左侧的导航面板(包含链接)

侧边栏是如下所示的

Security
---------
Link1
Link2
Link3
Configuration
---------
Link1
Link2

如果在"Configuration"部分下出现了更多的内容,则抛出此异常。根据用户在Page_Load上的权限动态删除链接(从完整列表中)。

我如何追踪这类问题?我启用了Visual Studio中的所有异常,但看到哪个控件导致此问题并没有中断?

加载视图状态失败。viewstate所在的控件树被加载的必须与用于保存的控件树相匹配上一个请求期间的视图状态。例如,在添加时控件,则在回发期间添加的控件必须匹配初始化过程中添加的控件的类型和位置请求。

[HttpException (0x80004005): 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.]
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +380
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +144
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +214
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +144
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +214
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +144
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +214
   System.Web.UI.Page.LoadAllState() +464
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1729

如何确定哪个控件导致ViewState加载失败

如果您查看本文中的页面循环,您可以看到viewstate在页面加载之前加载,并在呈现之前保存。您正在删除页面加载中的控件,这是在viewstate加载之后,这意味着在回发时,viewstate中的数据比页面期望的要少。试着在保存viewstate后删除preender中的控件,这应该可以解决你的问题。

詹姆斯:-)