我正在动态加载用户控件以在我的项目中切换视图。我知道我需要在每次回发时重新加载我的用户控件。奇怪的是,即使控制消失,控制仍然保持不变?我确认我加载的面板是空的,然后检查视图状态,我的值就在那里。
更奇怪的是,如果我加载一个不同的控件,它可以看到前一个控件的视图状态?我检查过,我的页面无法从动态加载的控件中看到viewstate,反之亦然。这使我认为用户控件被视为自己的页面。令人困惑的部分是为什么我加载的第二个视图可以看到第一个视图中的值以及为什么值存在,即使我控件已经消失了?
我也发现这部分代码没用。为什么删除控件?面板始终为空(代码来自Telerik):
string controlId = LatestLoadedControlName.Split('.')[0];
Control previousControl = pnlControlPlaceholder.FindControl(controlId);
if (!Object.Equals(previousControl, null))
{
this.pnlControlPlaceholder.Controls.Remove(previousControl);
}
我查看了几个帖子,大多数人说每个回发都会丢失视图状态,尽管对我来说并非如此。也许是因为我正在使用更新面板。尽管如果初始请求处理事件然后再次重新加载相同的控件,则视图状态将丢失。它似乎只是在下一次回发时保留了viewstate。
任何人都可以解释在用户控件之间共享viewstate的奇怪行为,或者即使控件丢失,为什么它存在?
答案 0 :(得分:0)
显然,你可以在两种情况下阅读页面之间的视图状态...跨页面回发和使用Server.Transfer时。我相信跨页回发场景会解释我所看到的。