2009-11-25 68 views
1

所以我需要在asp.net更新面板中的异步回发后滚动到页面的顶部。异步回贴后滚动到页首

我使用的代码是这样的:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestEventHandler); 
function EndRequestEventHandler(sender, args) 
{ 
    scrollTo(0,0); 
} 

但是,我只希望这当我点击某个按钮,这将导致异步回发运行。

如何在按钮事件背后的代码中连接此事件?

任何帮助将appreacited,谢谢!

回答

1

试试这个:

protected void myButon_Click(object sender, EventArgs e) 
{ 
ScriptManager.RegisterStartupScript(this, typeof(MyControl), "someText", "alert('!');", true); 
} 
+1

我试过这个没有成功。有些东西正在使页面再次向下滚动到我刚刚激活的面板。 – Farinha 2011-04-07 16:15:18

4

我一个解决方案的追求终于结束了。这个问题是帮助的一部分,其余的我发现here

只好重写记忆滚动位置的ASP.NET AJAX的行为:

<script type="text/javascript"> 

var manager = Sys.WebForms.PageRequestManager.getInstance(); 

manager.add_beginRequest(beginRequest); 
function beginRequest() 
{ 
    manager._scrollPosition = null; 
} 
</script> 

然后使用代码位的答案在这里,在页面的代码隐藏我想滚动到顶部:

ScriptManager.RegisterStartupScript(this, typeof(MyControl), "someText", "window.scrollTo(0, 0)", true); 
3

我用Farinha的答案(谢谢!),并改变它稍微所以我可以调用该方法,我想滚动到顶部,但在其他方面保持滚动位置的任何地方。

public static void ScrollToTop(int intPosY = 0) 
    { 
     string strScript = @"var manager = Sys.WebForms.PageRequestManager.getInstance(); 
      manager.add_beginRequest(beginRequest); 
      function beginRequest() 
      { 
       manager._scrollPosition = null; 
      } 
      window.scroll(0," + intPosY.ToString() + ");"; 

     Page pagCurrent = GetCurrentPage(); 
     ScriptManager.RegisterStartupScript(pagCurrent, pagCurrent.GetType(), string.Empty, strScript, true); 

     return; 
    } 

public static Page GetCurrentPage() 
{ 
    return (HttpContext.Current.Handler as Page); 
} 
1

提高对@Farinha@Bradford Scott答案,代码可以简化为这样:

var script = 
    "Sys.WebForms.PageRequestManager.getInstance()._scrollPosition = null; " + 
    "window.scrollTo(0, 0);" 

ScriptManager.RegisterStartupScript(this, GetType(), "key", script, true); 

实际上,我甚至不知道为什么他们的剧本工作,因为它们添加Sys.WebForms.PageRequestManager的复位的_scrollPosition作为add_beginRequest处理程序,这里我们实际上是从请求返回的。

无论如何,重置_scrollPosition之前,使自己的scrollTo()电话绝对有效。