【发布时间】:2013-06-11 13:34:52
【问题描述】:
我有一个自定义控件“BedGrid”,其中包含一组自定义控件,每个控件上都有一个单击处理程序。在父页面的 Page_Load 事件中,我生成 BedGrid 的集合,并将它们连接到事件处理程序。这一切都很好,当我在每个 Page_Load 上生成 BedGrid 时...孙子被点击,将事件触发到 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 中,那么为什么事件没有触发呢?其他一切都很好,这意味着控件及其子项可以正确绘制..
【问题讨论】:
标签: c# asp.net events caching custom-controls