我有一个aspx页面,它在回发时动态加载一些控件(即发生点击事件时)并将它们添加到占位符。根据点击的内容,需要加载一组不同的控件 这在第一次完美地工作,但是当我清除占位符的控件并尝试动态加载一组不同的控件时,我得到以下错误: “无法加载视图状态。加载视图状态的控制树必须与上一次请求期间用于保存视图状态的控制树匹配。”
即使我执行ViewState.Clear()。
也会发生这种情况有办法做到这一点吗?
答案 0 :(得分:6)
Yuriy Solodkyy在这里解释得很好:Dynamically Created Controls in ASP.NET
答案 1 :(得分:-1)
动态创建控件时,必须确保您创建的每个控件都具有唯一ID。
我认为这里发生的事情是你命名控件如:Control1,Control2,Control3。
也许当你点击创建一组不同的控件时,你可能会给不同类型的对象赋予相同的名称,让我们说首先创建Control1就像文本框一样,当你点击它的复选框时。
没有看到代码很难说为什么ViewState.Clear()不起作用,但如果你试图清除viewstate你不需要回发,你可以尝试请求一个新的页面并传递参数查询字符串而不是回发。这也会更快,因为您不必将ViewState信息发送回服务器。