动态加载不同控件时无法加载视图状态

5 asp.net viewstate

我有一个aspx页面,它在回发时动态加载一些控件(即当发生点击事件时)并将它们添加到占位符.根据所点击的内容,需要加载一组不同的控件.
这在第一次完美地工作,但是当我清除占位符的控件并尝试动态加载一组不同的控件时,我得到以下错误:"无法加载viewstate.正在加载viewstate的控件树必须与控件树匹配用于在上一个请求中保存视图状态."

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

有没有办法做到这一点?

Tim*_*uri 6

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


Ser*_*gio -1

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

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

也许当您单击创建一组不同的控件时,您可能会为不同类型的对象指定相同的名称,假设 Control1 最初是像文本框一样创建的,当您单击它时它是一个复选框。

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