MultiView& MaintainScrollPositionOnPostBack

时间:2011-01-29 22:15:07

标签: asp.net position multiview

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

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

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

问题是这些似乎都不会影响实际的转换回发,它们会对 next 回发生效,这实际上会导致更大的问题。

任何人都有一个经过验证的方法,只有在转换到新视图的回发中才能让MultiView页面跳转到页面顶部?

2 个答案:

答案 0 :(得分: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);
      }
  }

答案 1 :(得分:1)

最后找到答案/解决方法:4Guys

你必须通过操纵用于跟踪滚动位置的隐藏字段来欺骗ASP.Net为你做这件事。