0

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

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

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

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

任何人都有一种行之有效的方法让 MultiView 页面仅在转换到新视图的回发时跳转到页面顶部?

4

2 回答 2

4

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

(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);
      }
  }
于 2011-01-31T19:33:24.457 回答
1

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

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

于 2011-01-31T18:31:28.667 回答