ASP.NET在回发上动态添加UserControl和缓存数据

ASP.NET在回发上动态添加UserControl和缓存数据,asp.net,c#-4.0,user-controls,Asp.net,C# 4.0,User Controls,我有一个Report.aspx页面,它加载不同的UserControls,以交替查看特定的对象数据。UserControls继承相同的基类,在该基类中重写特定的操作方法。我为每个UserControl使用一个特定的服务类来获取数据,该数据实现了带有操作签名的特定接口 现在,我使用工厂模式将实际的UserControl类型返回到Report.aspx,并将其加载到PanelControl,然后调用control方法根据一些参数获取一些数据 此UserControl应在每次回发中加载,因为它是动态的

我有一个Report.aspx页面,它加载不同的
UserControls
,以交替查看特定的对象数据。
UserControls
继承相同的基类,在该基类中重写特定的操作方法。我为每个
UserControl
使用一个特定的服务类来获取数据,该数据实现了带有操作签名的特定接口

现在,我使用工厂模式将实际的
UserControl
类型返回到Report.aspx,并将其加载到
PanelControl
,然后调用control方法根据一些参数获取一些数据

UserControl
应在每次回发中加载,因为它是动态的,任何其他解决方案都可以接受。在每次回发时,虽然我不需要从调用DL的BL加载数据。我试图找到一个解决方案,向BL表明我不需要您再次调用数据,因为我只是针对其他问题发回(例如下载报告文件、打印等)。我希望这发生在BL级别,而不是ASPX前端。到目前为止,我认为我应该让BL知道这一点(回发或!回发)。我想我可以创建一个参数true、false并传递回发属性


欢迎任何想法、架构和最佳实践。

为什么不将调用BL的逻辑封装在if(!Page.IsPostback){……}中

您能否详细说明您的陈述“尽管我不需要从调用DL的BL加载数据,但每次回发时都会这样做?”??在每次回发期间,用户控件需要显示数据(即使它与上次回发的数据相同),因为用户控件与ASPNET网页经历相同的生命周期。如何防止这种情况发生?

我认为一个非常好的解决方案是.NET 4.0中的System.Runtime.Caching。 适用于您需要使用的每一层


这不会导致业务层中的高效缓存策略。我需要在BL中发生一些事情,可能创建一个CL或其他东西。没错,这就是我要搜索的,如何在回发中再次加载UserControl并防止再次从数据存储中加载数据。基本上,当前的问题是,控件是按程序加载的,因此每次回发都需要加载,也就是说,再次加载数据,这是每次都要耗费进程的操作。