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