我正在维护一个 ASP.NET 站点,用户可以在其中登录以注册一组数据(用于统计目的)。一个用户为一组单位注册数据,并且为每个单位填写一组表格(每个表格中有几个字段,但这并不重要)。一种情况是,用户有 12 个单元,每个单元中有 25 个表格要填写,这意味着总共 300 个表格。
用于注册这些数据的 ASP.NET 页面按以下方式制作:每个表单都在一个面板中,可以使用 AjaxControlToolkit CollapsiblePanelExtender 折叠,并且一个单元中的所有表单都在另一个也可以折叠的面板中。结果是您有一个类似树视图的结构,单元在顶部,在每个单元下您可以展开一组表单,并且可以进一步展开每个表单以填充数据(页面加载时所有面板都折叠默认情况下)。
该页面是完全动态生成的(因为可以在数据库中添加表单),并且为了生成 CollapsiblePanelExtenders,我有以下代码:
private CollapsiblePanelExtender GenerateCollapsiblePanelExtender(string id, Panel headerPanel, Panel contentPanel)
{
CollapsiblePanelExtender collapsiblePanel = new CollapsiblePanelExtender();
collapsiblePanel.ID = id + ID_COLLAPSIBLE_PANEL_POSTFIX;
collapsiblePanel.TargetControlID = contentPanel.ID;
collapsiblePanel.CollapseControlID = headerPanel.ID;
collapsiblePanel.ExpandControlID = headerPanel.ID;
collapsiblePanel.Collapsed = true;
collapsiblePanel.BehaviorID = collapsiblePanel.ID + ID_BEHAVIOUR_POSTFIX;
return collapsiblePanel;
}
一个用户有 12 个单元,每个单元有 25 个表单,这意味着总共有 312 个 CollapsiblePanelExtender。正如我所说,默认情况下它们都设置为折叠,但问题是:
当页面加载时,它们似乎都被展开了,然后浏览器“开始折叠它们”。然而,这需要很长时间(在 Firefox 中,我什至收到关于无响应脚本的警告,IE 和 Chrome 只需要很长时间,但没有警告)。当所有“折叠”完成后,它可以顺利打开和关闭单个面板,但用户抱怨初始加载速度极慢。
所以我的问题很简单:有没有办法优化它,使加载更顺畅?例如,是否可以最初仅在每个 CollapsiblePanelExtender 中加载标题面板,然后以某种方式异步加载内容面板?
最后一个澄清:
我知道我可以简单地将页面的设计更改为仅包含一个单元,从而大大减少内容的大小,但我希望避免这种情况(用户更喜欢将所有内容放在一个页面中的方式)。这也意味着对页面逻辑的相当大的改变(是的,我知道 - 那时它的代码库很差)