【问题标题】: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),那么这将自动为您处理,因为数据绑定只会在页面第一次加载时发生。

      【讨论】:

        【解决方案3】:

        您可以随时检查页面的IsAsync 属性以排除运行代码块。

        【讨论】:

          猜你喜欢
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多