5

我有一个aspx 页面,它在回发时动态加载一些控件(即当点击事件发生时)并将它们添加到占位符中。根据单击的内容,需要加载一组不同的控件。
这第一次完美运行,但是当我清除占位符的控件并尝试动态加载一组不同的控件时,我收到以下错误:“加载视图状态失败。正在加载视图状态的控件树必须与控件树匹配在上一个请求期间用于保存视图状态。”

即使我执行 ViewState.Clear(),也会发生这种情况。

有没有办法做到这一点?

4

2 回答 2

6

Yuriy Solodkyy 在这里很好地解释了它:在 ASP.NET 中动态创建的控件

于 2008-12-05T12:17:59.000 回答
-1

动态创建控件时,您必须确保创建的每个控件都有唯一的 ID。

我认为这里发生的事情是您将控件命名为:Control1、Control2、Control3。

也许当您单击创建一组不同的控件时,您可能会给不同类型的对象赋予相同的名称,比如说 Control1 最初是像文本框一样创建的,当您单击它时,它是一个复选框。

没有看到代码很难说出为什么 ViewState.Clear() 不起作用,但是如果您尝试清除不需要回发的视图状态,则可以尝试请求新页面并在查询字符串上传递参数的回发。这也会更快,因为您不必将 ViewState 信息发送回服务器。

于 2008-12-05T11:56:48.450 回答