【问题标题】:MultiView & MaintainScrollPositionOnPostBack多视图和维护ScrollPositionOnPostBack
【发布时间】:2011-06-17 21:49:22
【问题描述】:

我有一个带有 MultiView 控件的页面,其中一些视图的长度足以滚动。由于评论中的许多控件需要回发才能正常运行,因此在页面上启用了 MaintainScrollPositionOnPostBack。

当用户从一个视图转换到另一个视图时,我遇到了问题。如果它们位于长视图的底部,并转换到另一个长视图,则新视图会加载并一直滚动到底部。当用户转到 MultiView 中的新视图时,我需要跳转到页面顶部。

我尝试使用 OnActiveViewChanged 事件来: - 调用 RegisterStartupScript 将 window.location.hash 设置为我放置在页面顶部的锚点。 - 调用 RegisterStartupScript 调用 window.scrollTo(0,0) - 将 MaintainScrollPositionOnPostBack 临时设置为 false

问题是这些似乎都不会影响实际的过渡回发,它们会在下一个回发时生效,这实际上会导致更大的问题。

任何人都有一种经过验证的方法,让 MultiView 页面仅在转换到新视图的回发时跳转到页面顶部?

【问题讨论】:

    标签: asp.net position multiview


    【解决方案1】:

    这与我今天遇到的多视图问题完全相同。我找到了您的问题并开始寻找答案。看来我们找到了同一篇文章!

    (C#文章代码)

     private void ResetScrollPosition()
      {
          if (!ClientScript.IsClientScriptBlockRegistered(this.GetType(), "CreateResetScrollPosition"))
          {
              System.Text.StringBuilder script = new System.Text.StringBuilder();
              script.Append("function ResetScrollPosition() {");
              script.Append("  var scrollX = document.getElementById(\'__SCROLLPOSITIONX\');");
              script.Append("  var scrollY = document.getElementById(\'__SCROLLPOSITIONY\');");
              script.Append("  if (scrollX && scrollY) {");
              script.Append("    scrollX.value = 0;");
              script.Append("    scrollY.value = 0;");
              script.Append("  }");
              script.Append("}");
    
              //Create the ResetScrollPosition() function
              ClientScript.RegisterClientScriptBlock(this.GetType(), "CreateResetScrollPosition",
                 script.ToString(), true);
              //Add the call to the ResetScrollPosition() function
              ClientScript.RegisterStartupScript(this.GetType(), "CallResetScrollPosition", "ResetScrollPosition();", true);
          }
      }
    

    【讨论】:

    • 我发现这种方法有一个问题,因为它似乎不适用于更新面板内的多视图,因此您需要按照这个挂钩到 beginRequest 和 endRequest 处理程序答案:stackoverflow.com/questions/616210/…。这让我可以检查回发控件并仅为 endRequest 中的特定控件事件重置滚动位置。
    【解决方案2】:

    终于找到了答案/解决方法:4Guys

    您必须通过操纵 ASP.Net 用于跟踪滚动位置的隐藏字段来欺骗 ASP.Net。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多