【问题标题】:Prevent UpdatePanel loading entire page on server防止 UpdatePanel 在服务器上加载整个页面
【发布时间】:2012-06-02 10:54:12
【问题描述】:
据我了解,更新 UpdatePanel 时,会重新构建整个页面,但实际上只有 UpdatePanel 内的内容会重新加载到页面上。
我的页面的某些部分渲染速度很慢(由于数据库调用),我不希望所有这些都在 每个 回发时重新加载,如果它只需要重新加载一小部分页面。
示例 - 在页面顶部(在 UpdatePanel 之外)我显示一组总计,在 UpdatePanel 内我有一个带有“下一页”按钮的网格。当我单击“下一步”时,我希望网格更新,但我不希望服务器再次查询数据库以获取所有总数。
最好的方法是什么?
【问题讨论】:
标签:
asp.net
performance
webforms
updatepanel
asp.net-3.5
【解决方案1】:
您可以检查回发是否来自更新面板。如果是这样,那么您就不用计算总数。
如果您有多个更新面板,那么您可以通过检查以下内容来检查更新面板所做的回发:
bool isUpdatePanelPostBack
= ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID
.Equals(yourUpdatePanel.UniqueID);
if(!isUpdatePanelPostBack) {
//calculate your totals
}
如果您的页面上只有一个更新面板,那么您只需检查 IsInAsyncPostback 以设置布尔值:
bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;
【解决方案2】:
标准方法是在运行总计逻辑之前进行 !PostBack 检查。这样,它们只会在页面第一次加载时计算出来,之后它们会保存在您用来显示它们的控件的 ViewState 中。
或者,如果您使用数据绑定(使用 ObjectDataSource),那么这将自动为您处理,因为数据绑定只会在页面第一次加载时发生。