2011-01-29 48 views
0

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

当用户从一个视图切换到另一个视图时,出现问题。如果他们处于长视角的底部,并转换到另一个长视图,则新视图将加载并一直滚动到底部。当用户转到MultiView中的新视图时,我需要跳到页面的顶部。

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

的问题是,没有这些似乎影响实际的过渡回传,他们采取的下一个回发的效果,这实际上导致更大的问题。

任何人都有一个经过验证的方法,只有在回传到新视图的回传中,MultiView页面才能跳到页首?

回答

1

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

你要欺骗ASP.Net成通过操纵它使用了跟踪滚动位置的隐藏字段这样做是为了你。

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

我发现一个问题,使用这种方法,因为它似乎并没有为我更新面板内的多视角,所以你需要连接到beginRequest和endRequest处理程序,按照此答案:http://stackoverflow.com/questions/616210/reset-scroll-position-after-async-postback-asp-net。这使我可以检查回发控制并仅为endRequest中的特定控件事件重置滚动位置。 – hearn 2011-02-02 12:23:12

相关问题