我有一个自定义控件“BedGrid”,其中包含一组自定义控件,每个控件都有一个单击处理程序。在我的父页面的Page_Load事件中,我生成了一个BedGrids集合,并将它们连接到事件处理程序。这一切都运行正常,当我在每个Page_Load上生成BedGrids时...单击孙子,将事件发送到BedGrid,这会提醒我的父页面,一切都按计划进行。
问题是,它很慢..在每个Page_Load上生成所有这些自定义控件没有意义(尤其是在前端后进行)。所以,我想像这样缓存BedGrids的集合:
protected void Page_Load(object sender, EventArgs e)
{
DrawBedGrids();
}
protected void DrawBedGrids()
{
if (CachedBedgrids == null)
{
CachedBedgrids = new List<BedGrid>();
//Hit DB here and generate list of buildings....
foreach (Building b in buildings)
{
BedGrid bg = new BedGrid(b);
bg.RaiseAlertParentPage += new EventHandler(BedGrid_Clicked);
CachedBedgrids.Add(bg);
}
}
else
{
foreach (BedGrid bg in CachedBedgrids)
{
somePanel.Controls.Add(bg);
}
}
}
protected List<BedGrid> CachedBedgrids
{
get
{
try { return (List<BedGrid>)Session["CachedBedgrids"]; }
catch { return null; }
}
set { Session["CachedBedgrids"] = value; }
}
这一切都破了..事件永远不会发生......即使我添加
bg.RaiseAlertParentPage += new EventHandler(BedGrid_Clicked);
在我将BedGrid添加到面板之前,到“else”..
我错过了什么?所有这一切都发生在Page_Load中,为什么事件没有解雇?其他一切都很好,这意味着控件和他们的孩子画得恰到好处。
答案 0 :(得分:0)
这不起作用的原因是因为必须在帖子后面重新创建控件,并且连接事件,以便触发它们。
请参阅,因为服务器是无状态的,要在对象上触发事件,该对象需要重新创建并重新读取到表单。
如何缓存数据库结果并继续循环,否则构建新的,添加和连接控件?