2

据我了解,更新 UpdatePanel 时,会重建整个页面,但实际上只有 UpdatePanel 内的内容会重新加载到页面上。

我的页面的某些部分渲染速度很慢(由于数据库调用),如果只需要重新加载页面的一小部分,我不希望所有这些都在每次回发时重新加载。

示例 - 在页面顶部(在 UpdatePanel 之外)我显示一组总计,在 UpdatePanel 内我有一个带有“下一页”按钮的网格。当我单击“下一步”时,我希望网格更新,但我不希望服务器再次查询数据库以获取所有总数。

最好的方法是什么?

4

3 回答 3

1

您可以检查回发是否来自更新面板。如果是这样的话,那么你只是不计算总数。

如果您有多个更新面板,那么您可以通过检查以下内容来检查更新面板所做的回发:

bool isUpdatePanelPostBack 
        = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID
          .Equals(yourUpdatePanel.UniqueID);

if(!isUpdatePanelPostBack) {
    //calculate your totals 
}

如果您的页面上只有一个更新面板,那么您只需检查 IsInAsyncPostback 以设置布尔值:

bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;
于 2012-05-31T12:01:53.050 回答
0

标准方法是在运行总计逻辑之前进行 !PostBack 检查。这样,它们仅在页面第一次加载时计算,之后它们被保存在您用来显示它们的控件的 ViewState 中。

或者,如果您使用数据绑定(使用 ObjectDataSource),那么这将自动为您处理,因为数据绑定只会在页面第一次加载时发生。

于 2012-05-28T08:42:14.537 回答
0

您始终可以检查页面的IsAsync属性以将代码块排除在运行之外。

于 2012-05-28T01:19:36.673 回答