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

时间:2013-04-10 09:47:07

标签: c# asp.net web

我的网页遇到了Viewstate加载问题。

Page有一个登录工具,可以登录管理员和非管理员用户。当非管理员用户登录页面并单击启用了自动后备的复选框时,会发生奇怪的行为。 (错误详情如下)

后来我发现,在左侧的导航面板中(主持链接)

补充工具栏如下所示

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

Configuration
---------
Link1
Link2

如果超出“配置”部分下的任何内容,则会抛出此异常。根据用户在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

1 个答案:

答案 0 :(得分:0)

如果查看此article中的页面循环,您可以看到视图状态在页面加载之前加载并在渲染之前保存。您正在删除页面加载中的控件,这是在加载viewstate之后,这意味着在回发时,viewstate中的数据少于页面所期望的数据。尝试删除prerender中的控件,这应该在保存viewstate之后发生,这应该可以解决您的问题。

詹姆斯: - )

相关问题