据我了解,当UpdatePanel更新时,整个页面将被重建,但只有UpdatePanel内的内容才会在页面上重新加载。
我的页面的某些部分渲染速度很慢(由于数据库调用)而且我不希望所有这些部分都重新加载每个回发,如果它只需要重新加载一小部分页。
示例 - 在页面顶部(UpdatePanel外部)我显示一组总计,在UpdatePanel内部我有一个带有“下一页”按钮的网格。当我点击“下一步”时,我希望网格更新,但我不希望服务器再次查询数据库中的所有总数。
最好的方法是什么?
答案 0 :(得分:1)
您可以检查回发是否来自updatepanel。如果是这样,那么你就是不计算总数。
如果您有多个更新面板,那么您可以通过检查以下内容来检查更新面板的回发内容:
bool isUpdatePanelPostBack
= ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID
.Equals(yourUpdatePanel.UniqueID);
if(!isUpdatePanelPostBack) {
//calculate your totals
}
如果您的页面上只有一个更新面板,那么您只需检查IsInAsyncPostback以设置bool:
bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;
答案 1 :(得分:0)
您始终可以检查页面的IsAsync属性,以排除运行代码块。
答案 2 :(得分:0)
标准方法是在运行总计逻辑之前进行!PostBack检查。这样它们只是在第一次加载页面时计算出来,然后它们被保存在你用来显示它们的控件的ViewState中。
或者,如果您使用数据绑定(使用ObjectDataSource),那么这将自动为您处理,因为数据绑定只会在页面第一次加载时发生。