如果您有大量用户,这是一个丑陋的解决方案,但您可以将用户控件自己粘贴到会话中。我使用页脚控件执行此操作,因为我不想每次页面更改以重新创建页脚时都点击数据库。
如果您有很多用户并且他们经常使用此功能,则此解决方案可以真正在服务器上执行任务。至少我认为会...
但是您可以在 page_load 上重新填充包含用户控件的占位符。我可以很快举一个例子。
我做的例子:
if (Session["footer"] == null)
{
Session["footer"] = new Footer(LinksRules.BuildFooterLinks((int)WebSiteSections.Main));// where Footer is my control
}
footerPH.Controls.Add((Footer)Session["footer"]);
就像一个单例模式...
因此,正如我所见,您可以对任何会导致回发的事情执行此操作
Session["DynamicControls"] = PlaceHolder.Controls;
在 page-Load 方法中,您可以:
foreach(var control in (List<Controls>)Session["DynamicControls"])
{
yourPlaceHolder.Controls.Add(control);
}
如果会话对象为空,只需添加一个他们从未去过的对象..
我相信这会像您想要的那样保留在控件内的数据上。