我在ASP.Net页面上有一个ajax工具包选项卡容器,并且在后台代码中动态创建选项卡(在运行时,我有不同数量的选项卡,每个选项卡具有相同的布局,但具有不同的标题文本和正文数据)。每个选项卡只包含一个控件,这是我为使所有选项卡看起来都相同而构建的用户控件。用户控件中是我构建的另一个用户控件,用于处理选项卡中数据的分页。该分页用户控件有一个受其ViewState支持的属性。
我在ASPX页面上的一个BindData函数中绑定了选项卡的所有数据。在该函数中,我总是为动态创建的控件设置ID,并在设置任何其他属性、连接事件或将数据绑定到它们之前将它们添加到它们的容器控件中。
在这种情况下,我在分页用户控件中丢失了ViewState变量的值:
ASPX主页
Page_Init:
If IsPostBack Then
BindData ' Recreates the control tree on postback.
' ViewState is loaded successfully here.
End If
Page_Load:
If Not IsPostBack Then
BindData() ' Bind the initial data.
End If
[Some event that happens after Page_Load in response to clicking on my user control]:
...
BindData() ' Controls recreated with changed data but same IDs as in Page_Init.
' ViewState does not get loaded back into my control tree.我不应该期望在页面生命周期中的第二个版本的控件树上再次加载ViewState吗?
发布于 2009-10-09 19:56:04
经过多次阅读,似乎在初始化阶段之后创建的任何动态控件都不会加载ViewState。就我的情况而言,在我的BindData函数中,我获取局部变量的ViewState值,重新创建控件,然后重置ViewState值。这似乎是可行的。
发布于 2009-10-09 17:01:11
您应该在pre-init阶段创建动态控件。并在回发后重新创建它们。请在此处查看页面生命周期的详细信息:http://msdn.microsoft.com/en-us/library/ms178472.aspx
https://stackoverflow.com/questions/1544305
复制相似问题